Adding support for (de)serializing MutableSet
[satune.git] / src / Serialize / deserializer.cc
index 71191198ee10781658094602f0dbbd10620ca40c..fc4cd7bab1faa3f30191d05c9ebe8385830b57f4 100644 (file)
@@ -13,6 +13,7 @@
 #include "predicate.h"
 #include "table.h"
 #include "element.h"
+#include "mutableset.h"
 
 Deserializer::Deserializer(const char* file):
        solver(new CSolver())
@@ -148,16 +149,28 @@ void Deserializer::deserializeSet(){
        myread(&low, sizeof(uint64_t));
        uint64_t high;
        myread(&high, sizeof(uint64_t));
+       bool isMutable;
+       myread(&isMutable, sizeof(bool));
+       Set *set;
+       if(isMutable){
+               set = new MutableSet(type);
+       }
        uint size;
        myread(&size, sizeof(uint));
        Vector<uint64_t> members;
        for(uint i=0; i<size; i++){
                uint64_t mem;
                myread(&mem, sizeof(uint64_t));
-               members.push(mem);
+               if(isMutable) {
+                       ((MutableSet*) set)->addElementMSet(mem);
+               }else {
+                       members.push(mem);
+               }
+       }
+       if(!isMutable){
+               set = isRange? solver->createRangeSet(type, low, high):
+                       solver->createSet(type, members.expose(), size);
        }
-       Set *set = isRange? solver->createRangeSet(type, low, high):
-               solver->createSet(type, members.expose(), size);
        map.put(s_ptr, set);
 }