Merging + fixing memory bugs
[satune.git] / src / AST / table.cc
index 828cd79af944634c006f7b6efc81b3e9034d3bbf..da0188a59af4ed5b5a8a29c0771528a6d0cc0b34 100644 (file)
@@ -7,8 +7,7 @@
 #include "csolver.h"
 #include "serializer.h"
 
-Table::Table(Set **_domains, uint numDomain, Set *_range) :
-       domains(_domains, numDomain),
+Table::Table(Set *_range) :
        range(_range) {
        entries = new HashsetTableEntry();
 }
@@ -34,12 +33,9 @@ Table *Table::clone(CSolver *solver, CloneMap *map) {
        Table *t = (Table *) map->get(this);
        if (t != NULL)
                return t;
-       Set *array[domains.getSize()];
-       for (uint i = 0; i < domains.getSize(); i++) {
-               array[i] = domains.get(i)->clone(solver, map);
-       }
+
        Set *rcopy = range != NULL ? range->clone(solver, map) : NULL;
-       t = solver->createTable(array, domains.getSize(), rcopy);
+       t = solver->createTable(rcopy);
        SetIteratorTableEntry *entryit = entries->iterator();
        while (entryit->hasNext()) {
                TableEntry *te = entryit->next();
@@ -59,40 +55,42 @@ Table::~Table() {
        delete entries;
 }
 
-
-
-void Table::serialize(Serializer* serializer){
-       if(serializer->isSerialized(this))
+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);
-       }
-       if(range!= NULL)
+
+       if (range != NULL)
                range->serialize(serializer);
-       
-       ASTNodeType type = TABLETYPE;   
+
+       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();
+       Table *This = this;
+       serializer->mywrite(&This, sizeof(Table *));
+       serializer->mywrite(&range, sizeof(Set *));
+       uint size = entries->getSize();
        serializer->mywrite(&size, sizeof(uint));
-       SetIteratorTableEntryiterator = getEntries();
-       while(iterator->hasNext()){
-               TableEntryentry = iterator->next();
+       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);
        }
+       delete iterator;
 }
 
-
+void Table::print() {
+       model_print("{Table<%p>:\n", this);
+       SetIteratorTableEntry *iterator = getEntries();
+       while (iterator->hasNext()) {
+               TableEntry *entry = iterator->next();
+               model_print("<");
+               for (uint i = 0; i < entry->inputSize; i++) {
+                       model_print("%lu, ", entry->inputs[i]);
+               }
+               model_print(" == %lu>", entry->output);
+       }
+       model_print("}\n");
+       delete iterator;
+}