completed serializer/deserializer
[satune.git] / src / AST / table.cc
index e0f735f0d21c5cd9110a41e4a42fdfae94da592d..4ce62701d5446f1b676d47608e1036b8338918b4 100644 (file)
@@ -5,6 +5,7 @@
 #include "set.h"
 #include "mutableset.h"
 #include "csolver.h"
+#include "serializer.h"
 
 Table::Table(Set **_domains, uint numDomain, Set *_range) :
        domains(_domains, numDomain),
@@ -58,3 +59,40 @@ Table::~Table() {
        delete entries;
 }
 
+
+
+void Table::serialize(Serializer* serializer){
+       if(serializer->isSerialized(this))
+               return;
+       serializer->addObject(this);
+       
+       uint size = domains.getSize();
+       for(uint i=0; i<size; i++){
+               Set* domain = domains.get(i);
+               domain->serialize(serializer);
+       }
+       range->serialize(serializer);
+       
+       ASTNodeType type = TABLETYPE;   
+       serializer->mywrite(&type, sizeof(ASTNodeType));
+       Table* This = this;
+       serializer->mywrite(&This, sizeof(Table*));
+       serializer->mywrite(&size, sizeof(uint));
+       for(uint i=0; i<size; i++){
+               Set* domain = domains.get(i);
+               serializer->mywrite(&domain, sizeof(Set*));
+       }
+       serializer->mywrite(&range, sizeof(Set*));
+       size = entries->getSize();
+       serializer->mywrite(&size, sizeof(uint));
+       SetIteratorTableEntry* iterator = getEntries();
+       while(iterator->hasNext()){
+               TableEntry* entry = iterator->next();
+               serializer->mywrite(&entry->output, sizeof(uint64_t));
+               serializer->mywrite(&entry->inputSize, sizeof(uint));
+               serializer->mywrite(entry->inputs, sizeof(uint64_t) * entry->inputSize);
+               ASSERT(0);
+       }
+}
+
+