(de)serializer: BooleanOrder + BooleanVar
authorHamed <hamed.gorjiara@gmail.com>
Fri, 8 Sep 2017 20:46:21 +0000 (13:46 -0700)
committerHamed <hamed.gorjiara@gmail.com>
Fri, 8 Sep 2017 20:46:21 +0000 (13:46 -0700)
src/AST/boolean.cc
src/AST/boolean.h
src/Serialize/deserializer.cc
src/Serialize/deserializer.h
src/Serialize/serializable.h
src/Serialize/serializer.cc

index 978664450ba930b9eab9b61794197519a4309632..58bc05eaadaf550364bda3f7fe66a8218b3d8f88 100644 (file)
@@ -98,3 +98,24 @@ void BooleanPredicate::updateParents() {
 void BooleanLogic::updateParents() {
        for(uint i=0;i < inputs.getSize(); i++) inputs.get(i)->parents.push(this);
 }
+
+void BooleanVar::serialize(Serializer* serializer){
+       if(serializer->isSerialized(this))
+               return;
+       serializer->addObject(this);
+       serializer->mywrite(&type, sizeof(ASTNodeType));
+       serializer->mywrite(this, sizeof(BooleanVar*));
+       serializer->mywrite(&vtype, sizeof(VarType));
+}
+
+void BooleanOrder::serialize(Serializer* serializer){
+       if(serializer->isSerialized(this))
+               return;
+       serializer->addObject(this);
+//     order->serialize(serializer);
+       serializer->mywrite(&type, sizeof(ASTNodeType));
+       serializer->mywrite(this, sizeof(BooleanOrder*));
+       serializer->mywrite(&order, sizeof(Order*));
+       serializer->mywrite(&first, sizeof(uint64_t));
+       serializer->mywrite(&second, sizeof(uint64_t));
+}
index 8be1d30626c93f6c3612ab0447157bb3f4825dc1..1c45f04b0cdfeb4c73733f67050084249c4c7f52 100644 (file)
@@ -8,14 +8,15 @@
 #include "astnode.h"
 #include "functionencoding.h"
 #include "constraint.h"
+#include "serializable.h"
+#include "serializer.h"
 
-
-
-class Boolean : public ASTNode {
+class Boolean : public ASTNode, public Serializable {
 public:
        Boolean(ASTNodeType _type);
        virtual ~Boolean() {}
        virtual Boolean *clone(CSolver *solver, CloneMap *map) = 0;
+       virtual void serialize(Serializer* ) = 0;
        virtual bool isTrue() {return boolVal == BV_MUSTBETRUE;}
        virtual bool isFalse() {return boolVal == BV_MUSTBEFALSE;}
        Polarity polarity;
@@ -32,6 +33,8 @@ public:
        Boolean *clone(CSolver *solver, CloneMap *map);
        bool isTrue() {return istrue;}
        bool isFalse() {return !istrue;}
+       void serialize(Serializer *serializer ){};
+       
        bool istrue;
        CMEMALLOC;
 };
@@ -40,7 +43,8 @@ class BooleanVar : public Boolean {
 public:
        BooleanVar(VarType t);
        Boolean *clone(CSolver *solver, CloneMap *map);
-
+       void serialize(Serializer *serializer );
+       
        VarType vtype;
        Edge var;
        CMEMALLOC;
@@ -50,7 +54,8 @@ class BooleanOrder : public Boolean {
 public:
        BooleanOrder(Order *_order, uint64_t _first, uint64_t _second);
        Boolean *clone(CSolver *solver, CloneMap *map);
-
+       void serialize(Serializer *serializer );
+       
        Order *order;
        uint64_t first;
        uint64_t second;
@@ -61,6 +66,7 @@ class BooleanPredicate : public Boolean {
 public:
        BooleanPredicate(Predicate *_predicate, Element **_inputs, uint _numInputs, BooleanEdge _undefinedStatus);
        Boolean *clone(CSolver *solver, CloneMap *map);
+       void serialize(Serializer *serializer );
 
        Predicate *predicate;
        FunctionEncoding encoding;
@@ -76,7 +82,8 @@ class BooleanLogic : public Boolean {
 public:
        BooleanLogic(CSolver *solver, LogicOp _op, BooleanEdge *array, uint asize);
        Boolean *clone(CSolver *solver, CloneMap *map);
-
+       void serialize(Serializer *serializer );
+       
        LogicOp op;
        bool replaced;
        Array<BooleanEdge> inputs;
index 1c45a697a23f59e8e15d73f8464b4e834ca2b67a..163bd199e643e86a90a9b7eaf8b0b7248cebcbef 100644 (file)
@@ -39,6 +39,9 @@ CSolver * Deserializer::deserialize(){
                        case BOOLEANEDGE:
                                deserializeBooleanEdge();
                                break;
+                       case BOOLEANVAR:
+                               deserializeBooleanVar();
+                               break;
                        default:
                                ASSERT(0);
                }
@@ -56,3 +59,25 @@ void Deserializer::deserializeBooleanEdge(){
        BooleanEdge res(b);
        solver->addConstraint(isNegated?res.negate():res);
 }
+
+void Deserializer::deserializeBooleanVar(){
+       BooleanVar *b;
+       myread(&b, sizeof(BooleanVar*));
+       VarType vtype;
+       myread(&vtype, sizeof(VarType));
+       map.put(b, solver->getBooleanVar(vtype).getBoolean());
+}
+
+void Deserializer::deserializeBooleanOrder(){
+       BooleanOrder* bo_ptr;
+       myread(&bo_ptr, sizeof(BooleanOrder*));
+       Order* optr;
+       myread(&optr, sizeof(Order*));
+       uint64_t first;
+       myread(&first, sizeof(uint64_t));
+       uint64_t second;
+       myread(&second, sizeof(uint64_t));
+       ASSERT(map.contains(optr));
+       Order* order  = (Order*) map.get(optr);
+       map.put(bo_ptr, solver->orderConstraint(order, first, second).getBoolean());
+}
\ No newline at end of file
index 8448dff18a3d6d4080b02924ecff3c69f9e4145d..7e26cf327ac3185ce7bcebe890312703072c2924 100644 (file)
@@ -25,6 +25,8 @@ public:
 private:
        ssize_t myread (void *__buf, size_t __nbytes);
        void deserializeBooleanEdge();
+       void deserializeBooleanVar();
+       void deserializeBooleanOrder();
        CSolver *solver;
        int filedesc;
        CloneMap map;
index cdaea04d520610f65229aa9e805b07920bee7c66..a5e769d1938a08130d591322b9eda80d0d225a4c 100644 (file)
@@ -8,7 +8,6 @@
 
 #ifndef SERIALIZABLE_H
 #define SERIALIZABLE_H
-#include "classlist.h"
 
 class Serializable{
        virtual void serialize(Serializer* ) = 0;
index 301a312dd85924b6deed60bdb3cba74519a8527d..bf894563cdb749ef3bb7108a74107a56d44acd3e 100644 (file)
@@ -9,6 +9,7 @@
 #include "serializer.h"
 #include "unistd.h"
 #include "fcntl.h"
+#include "boolean.h"
 
 Serializer::Serializer(const char *file) {
        filedesc = open(file, O_WRONLY | O_CREAT, 0666);
@@ -35,7 +36,7 @@ void serializeBooleanEdge(Serializer* serializer, BooleanEdge& be){
        if(serializer->isSerialized(be.getRaw()))
                return;
        serializer->addObject(be.getRaw());
-//     b->seralize(serializer);
+       be.getBoolean()->serialize(serializer);
        ASTNodeType type = BOOLEANEDGE;
        serializer->mywrite(&type, sizeof(ASTNodeType));
        serializer->mywrite(be.getRaw(), sizeof(Boolean*));