From 8391eb863cc6fa8e4b620fdd0ba5e482d22e75ea Mon Sep 17 00:00:00 2001 From: Hamed Gorjiara Date: Thu, 4 Oct 2018 15:01:25 -0700 Subject: [PATCH] Bug fix for serializing Boolean Const ... --- src/AST/boolean.cc | 10 ++++++++++ src/AST/boolean.h | 2 +- src/Serialize/deserializer.cc | 12 ++++++++++++ src/Serialize/deserializer.h | 1 + 4 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/AST/boolean.cc b/src/AST/boolean.cc index 647f548..e63549e 100644 --- a/src/AST/boolean.cc +++ b/src/AST/boolean.cc @@ -116,6 +116,16 @@ void BooleanVar::serialize(Serializer *serializer) { serializer->mywrite(&vtype, sizeof(VarType)); } +void BooleanConst::serialize(Serializer *serializer) { + if (serializer->isSerialized(this)) + return; + serializer->addObject(this); + serializer->mywrite(&type, sizeof(ASTNodeType)); + BooleanConst *This = this; + serializer->mywrite(&This, sizeof(BooleanConst *)); + serializer->mywrite(&istrue, sizeof(bool)); +} + void BooleanVar::print() { model_print("BooleanVar<%p>\n", this); } diff --git a/src/AST/boolean.h b/src/AST/boolean.h index 77dc244..dd1b580 100644 --- a/src/AST/boolean.h +++ b/src/AST/boolean.h @@ -35,7 +35,7 @@ public: Boolean *clone(CSolver *solver, CloneMap *map); bool isTrue() {return istrue;} bool isFalse() {return !istrue;} - void serialize(Serializer *serializer ) {}; + void serialize(Serializer *serializer ); virtual void print(); bool istrue; CMEMALLOC; diff --git a/src/Serialize/deserializer.cc b/src/Serialize/deserializer.cc index 2c4d7bb..548619f 100644 --- a/src/Serialize/deserializer.cc +++ b/src/Serialize/deserializer.cc @@ -76,6 +76,9 @@ CSolver *Deserializer::deserialize() { case BOOLEANVAR: deserializeBooleanVar(); break; + case BOOLCONST: + deserializeBooleanConst(); + break; case ORDERCONST: deserializeBooleanOrder(); break; @@ -145,6 +148,15 @@ void Deserializer::deserializeBooleanVar() { map.put(b, solver->getBooleanVar(vtype).getBoolean()); } +void Deserializer::deserializeBooleanConst() { + BooleanVar *b; + myread(&b, sizeof(BooleanVar *)); + bool istrue; + myread(&istrue, sizeof(bool)); + map.put(b, istrue?solver->getBooleanTrue().getBoolean(): + solver->getBooleanFalse().getBoolean()); +} + void Deserializer::deserializeBooleanOrder() { BooleanOrder *bo_ptr; myread(&bo_ptr, sizeof(BooleanOrder *)); diff --git a/src/Serialize/deserializer.h b/src/Serialize/deserializer.h index c56911d..81baeef 100644 --- a/src/Serialize/deserializer.h +++ b/src/Serialize/deserializer.h @@ -26,6 +26,7 @@ private: ssize_t myread (void *__buf, size_t __nbytes); void deserializeBooleanEdge(); void deserializeBooleanVar(); + void deserializeBooleanConst(); void deserializeBooleanOrder(); void deserializeOrder(); void deserializeSet(); -- 2.34.1