return;
serializer->addObject(this);
order->serialize(serializer);
+
serializer->mywrite(&type, sizeof(ASTNodeType));
BooleanOrder* This = this;
serializer->mywrite(&This, sizeof(BooleanOrder*));
Element *input = inputs.get(i);
serializer->mywrite(&input, sizeof(Element *));
}
- Boolean* undefStat = undefStatus.getRaw();
+ Boolean* undefStat = undefStatus!= BooleanEdge(NULL)?undefStatus.getRaw() : NULL;
serializer->mywrite(&undefStat, sizeof(Boolean*));
}
Set* domain = domains.get(i);
domain->serialize(serializer);
}
- range->serialize(serializer);
+ if(range!= NULL)
+ range->serialize(serializer);
ASTNodeType type = TABLETYPE;
serializer->mywrite(&type, sizeof(ASTNodeType));
serializer->mywrite(&entry->output, sizeof(uint64_t));
serializer->mywrite(&entry->inputSize, sizeof(uint));
serializer->mywrite(entry->inputs, sizeof(uint64_t) * entry->inputSize);
- ASSERT(0);
}
}
void Deserializer::deserializeBooleanOrder(){
BooleanOrder* bo_ptr;
myread(&bo_ptr, sizeof(BooleanOrder*));
- Order* optr;
- myread(&optr, sizeof(Order*));
+ Order* order;
+ myread(&order, sizeof(Order*));
+ ASSERT(map.contains(order));
+ order = (Order*) map.get(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());
}
Boolean* stat_ptr;
myread(&stat_ptr, sizeof(Boolean *));
- BooleanEdge tmp(stat_ptr);
- bool isNegated = tmp.isNegated();
- ASSERT(map.contains(tmp.getBoolean()));
- stat_ptr = (Boolean*) map.get(tmp.getBoolean());
- BooleanEdge res(stat_ptr);
- BooleanEdge undefStatus = isNegated?res.negate():res;
-
+ BooleanEdge undefStatus;
+ if(stat_ptr != NULL){
+ BooleanEdge tmp(stat_ptr);
+ bool isNegated = tmp.isNegated();
+ ASSERT(map.contains(tmp.getBoolean()));
+ stat_ptr = (Boolean*) map.get(tmp.getBoolean());
+ BooleanEdge res(stat_ptr);
+ undefStatus = isNegated?res.negate():res;
+ } else {
+ undefStatus = NULL;
+ }
map.put(bp_ptr, solver->applyPredicateTable(predicate, members.expose(), size, undefStatus).getBoolean());
}
}
Set* range;
myread(&range, sizeof(Set*));
- ASSERT(map.contains(range));
- range = (Set*) map.get(range);
+ if(range != NULL){
+ ASSERT(map.contains(range));
+ range = (Set*) map.get(range);
+ }
Table* table = solver->createTable(domains.expose(), size, range);
myread(&size, sizeof(uint));
for(uint i=0; i<size; i++){
Vector<uint64_t> inputs;
inputs.setSize(inputSize);
myread(inputs.expose(), sizeof(uint64_t)*inputSize);
- ASSERT(0);
table->addNewTableEntry(inputs.expose(), inputSize, output);
}
}
BooleanEdge CSolver::applyPredicate(Predicate *predicate, Element **inputs, uint numInputs) {
- return applyPredicateTable(predicate, inputs, numInputs, NULL);
+ return applyPredicateTable(predicate, inputs, numInputs, BooleanEdge(NULL));
}
BooleanEdge CSolver::applyPredicateTable(Predicate *predicate, Element **inputs, uint numInputs, BooleanEdge undefinedStatus) {