Bug fix: typos
[satune.git] / src / Serialize / deserializer.cc
index 42b565e1cf962a8ea2f52bfecc2e7951cd42b603..d0cfb6cf8c01f7c4453c50d3641761e039e772d6 100644 (file)
@@ -17,7 +17,7 @@
 
 #define READBUFFERSIZE 16384
 
-Deserializer::Deserializer(const char *file) :
+Deserializer::Deserializer(const char *file, InterpreterType itype) :
        buffer((char *) ourmalloc(READBUFFERSIZE)),
        bufferindex(0),
        bufferbytes(0),
@@ -29,6 +29,9 @@ Deserializer::Deserializer(const char *file) :
        if (filedesc < 0) {
                exit(-1);
        }
+       if (itype != SATUNE) {
+               solver->setInterpreter(itype);
+       }
 }
 
 Deserializer::~Deserializer() {
@@ -76,6 +79,9 @@ CSolver *Deserializer::deserialize() {
                case BOOLEANVAR:
                        deserializeBooleanVar();
                        break;
+               case BOOLCONST:
+                       deserializeBooleanConst();
+                       break;
                case ORDERCONST:
                        deserializeBooleanOrder();
                        break;
@@ -145,6 +151,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 *));
@@ -315,26 +330,36 @@ void Deserializer::deserializeTable() {
 
 
 void Deserializer::deserializeElementSet() {
+       bool anyValue = false;
+       myread(&anyValue, sizeof(bool));
        ElementSet *es_ptr;
        myread(&es_ptr, sizeof(ElementSet *));
        Set *set;
        myread(&set, sizeof(Set *));
        ASSERT(map.contains(set));
        set  = (Set *) map.get(set);
-       map.put(es_ptr, solver->getElementVar(set));
+       Element *newEl = solver->getElementVar(set);
+       newEl->anyValue = anyValue;
+       map.put(es_ptr, newEl);
 }
 
 void Deserializer::deserializeElementConst() {
+       bool anyValue = false;
+       myread(&anyValue, sizeof(bool));
        ElementSet *es_ptr;
        myread(&es_ptr, sizeof(ElementSet *));
        VarType type;
        myread(&type, sizeof(VarType));
        uint64_t value;
        myread(&value, sizeof(uint64_t));
-       map.put(es_ptr, solver->getElementConst(type, value));
+       Element *newEl = solver->getElementConst(type, value);
+       newEl->anyValue = anyValue;
+       map.put(es_ptr, newEl);
 }
 
 void Deserializer::deserializeElementFunction() {
+       bool anyValue = false;
+       myread(&anyValue, sizeof(bool));
        ElementFunction *ef_ptr;
        myread(&ef_ptr, sizeof(ElementFunction *));
        Function *function;
@@ -360,7 +385,9 @@ void Deserializer::deserializeElementFunction() {
        overflowstatus = (Boolean *) map.get(tmp.getBoolean());
        BooleanEdge res(overflowstatus);
        BooleanEdge undefStatus = isNegated ? res.negate() : res;
-       map.put(ef_ptr, solver->applyFunction(function, members.expose(), size, undefStatus));
+       Element *newEl = solver->applyFunction(function, members.expose(), size, undefStatus);
+       newEl->anyValue = anyValue;
+       map.put(ef_ptr, newEl);
 }