49 namespace Gecode {
namespace CPProfiler {
52 static const int32_t PROFILER_PROTOCOL_VERSION = 3;
80 bool valid(
void)
const;
86 const T& value(
void)
const;
99 present =
true; value_ =
t;
109 assert(present);
return value_;
114 assert(present);
return value_;
138 bool _have_label{
false};
141 bool _have_nogood{
false};
144 bool _have_info{
false};
147 bool _have_version{
false};
162 int32_t
alt(
void)
const {
return _alt; }
165 int32_t
kids(
void)
const {
return _kids; }
187 _have_version =
true;
192 int32_t
version(
void)
const {
return _version; }
195 const std::string&
label()
const {
return _label; }
198 const std::string&
nogood(
void)
const {
return _nogood; }
202 const std::string&
info(
void)
const {
return _info; }
209 _have_nogood =
false;
211 _have_version =
false;
230 static void serializeType(std::vector<char>& data,
MsgType f) {
231 data.push_back(static_cast<char>(f));
234 static void serializeField(std::vector<char>& data, Field f) {
235 data.push_back(static_cast<char>(f));
238 static void serialize(std::vector<char>& data, int32_t
i) {
239 data.push_back(static_cast<char>((i & 0xFF000000) >> 24));
240 data.push_back(static_cast<char>((i & 0xFF0000) >> 16));
241 data.push_back(static_cast<char>((i & 0xFF00) >> 8));
242 data.push_back(static_cast<char>((i & 0xFF)));
245 static void serialize(std::vector<char>& data,
NodeStatus s) {
246 data.push_back(static_cast<char>(s));
249 static void serialize(std::vector<char>& data,
const std::string& s) {
250 serialize(data, static_cast<int32_t>(s.size()));
256 static MsgType deserializeMsgType(iter& it) {
257 auto m =
static_cast<MsgType>(*it);
262 static Field deserializeField(iter& it) {
263 auto f =
static_cast<Field
>(*it);
268 static int32_t deserializeInt(iter& it) {
269 auto b1 =
static_cast<uint32_t
>(
reinterpret_cast<uint8_t&
>(*it++));
270 auto b2 =
static_cast<uint32_t
>(
reinterpret_cast<uint8_t&
>(*it++));
271 auto b3 =
static_cast<uint32_t
>(
reinterpret_cast<uint8_t&
>(*it++));
272 auto b4 =
static_cast<uint32_t
>(
reinterpret_cast<uint8_t&
>(*it++));
274 return static_cast<int32_t
>(
b1 << 24 |
b2 << 16 | b3 << 8 | b4);
277 static NodeStatus deserializeStatus(iter& it) {
283 static std::string deserializeString(iter& it) {
285 int32_t
size = deserializeInt(it);
286 result.reserve(static_cast<size_t>(size));
287 for (int32_t i = 0; i <
size; i++) {
296 int32_t alt, int32_t kids,
NodeStatus status) {
331 std::vector<char> data;
332 size_t dataSize = 1 + (msg.
isNode() ? 4 * 8 + 1 : 0) +
336 data.reserve(dataSize);
338 serializeType(data, msg.
type());
342 serialize(data, n_uid.nid);
343 serialize(data, n_uid.rid);
344 serialize(data, n_uid.tid);
347 serialize(data, p_uid.nid);
348 serialize(data, p_uid.rid);
349 serialize(data, p_uid.tid);
351 serialize(data, msg.
alt());
352 serialize(data, msg.
kids());
353 serialize(data, msg.
status());
357 serializeField(data, VERSION);
358 serialize(data, msg.
version());
361 serializeField(data, LABEL);
362 serialize(data, msg.
label());
365 serializeField(data, NOGOOD);
366 serialize(data, msg.
nogood());
369 serializeField(data, INFO);
370 serialize(data, msg.
info());
376 char *end = data +
size;
377 msg.
set_type(deserializeMsgType(data));
379 int32_t nid = deserializeInt(data);
380 int32_t rid = deserializeInt(data);
381 int32_t tid = deserializeInt(data);
385 nid = deserializeInt(data);
386 rid = deserializeInt(data);
387 tid = deserializeInt(data);
391 msg.
set_alt(deserializeInt(data));
398 while (data != end) {
399 MessageMarshalling::Field f = deserializeField(data);
404 msg.
set_label(deserializeString(data));
break;
406 msg.
set_nogood(deserializeString(data));
break;
408 msg.
set_info(deserializeString(data));
break;
void set_kids(int32_t kids)
const std::string & label() const
Message for the CP Profiler.
std::vector< char > serialize(void) const
void unset(void)
Disregard value.
bool valid(const FloatVal &n)
Return whether float n is a valid number.
void set_status(NodeStatus status)
Node representing failure.
void set_version(int32_t v)
NodeStatus status(void) const
Node representing a solution.
void set_parentUID(const NodeUID &p)
Node skipped by backjumping.
MsgType
Types of messages for CP Profiler.
Gecode::FloatVal c(-8, 8)
int p
Number of positive literals for node type.
Gecode::IntArgs i(4, 1, 2, 3, 4)
int n
Number of negative literals for node type.
void makeStart(const std::string &info)
void set(const T &t)
Set value to t.
bool isRestart(void) const
unsigned int size(I &i)
Size of all ranges of range iterator i.
Node representing a branch.
int32_t version(void) const
void set_nogood(const std::string &nogood)
T value_
A value, potentially not initialized.
bool valid(void) const
Check whether value is present.
Post propagator for f(x \diamond_{\mathit{op}} y) \sim_r z \f$ void rel(Home home
void set_type(MsgType type)
const std::string & nogood(void) const
void set_info(const std::string &info)
Message & makeNode(NodeUID node, NodeUID parent, int32_t alt, int32_t kids, NodeStatus status)
bool has_nogood(void) const
void makeRestart(const std::string &info)
bool has_label(void) const
const Message & get_msg(void)
void set_nodeUID(const NodeUID &n)
const std::string & info(void) const
bool has_info(void) const
NodeUID parentUID(void) const
void set_label(const std::string &label)
NodeUID nodeUID(void) const
Gecode toplevel namespace
NodeStatus
Types of nodes for CP Profiler.
void set_alt(int32_t alt)
const T & value(void) const
Access value.
Unique identifier for a node.
void deserialize(char *data, size_t size)
bool has_version(void) const