size = allElements.getSize();
for (uint i = 0; i < size; i++) {
- delete allElements.get(i);
+ Element* el = allElements.get(i);
+ delete el;
}
size = allTables.getSize();
return copy;
}
+CSolver* CSolver::deserialize(const char * file){
+ model_print("deserializing ...\n");
+ Deserializer deserializer(file);
+ return deserializer.deserialize();
+}
+
void CSolver::serialize() {
model_print("serializing ...\n");
- {
- Serializer serializer("dump");
- SetIteratorBooleanEdge *it = getConstraints();
- while (it->hasNext()) {
- BooleanEdge b = it->next();
- serializeBooleanEdge(&serializer, b);
- }
- delete it;
- }
- model_print("deserializing ...\n");
- {
- Deserializer deserializer("dump");
- deserializer.deserialize();
+ printConstraints();
+ Serializer serializer("dump");
+ SetIteratorBooleanEdge *it = getConstraints();
+ while (it->hasNext()) {
+ BooleanEdge b = it->next();
+ serializeBooleanEdge(&serializer, b, true);
}
-
+ delete it;
}
Set *CSolver::createSet(VarType type, uint64_t *elements, uint numelements) {
}
void CSolver::addConstraint(BooleanEdge constraint) {
- if (constraint.isNegated())
- model_print("!");
- constraint.getBoolean()->print();
+#ifdef TRACE_DEBUG
+ model_println("****New Constraint******");
+#endif
+ if(constraint.isNegated())
+ model_print("!");
+ constraint.getBoolean()->print();
if (isTrue(constraint))
return;
else if (isFalse(constraint)) {
long long startTime = getTimeNano();
computePolarities(this);
- //Preprocess pp(this);
- //pp.doTransform();
-
- //DecomposeOrderTransform dot(this);
- // dot.doTransform();
+ Preprocess pp(this);
+ pp.doTransform();
- //IntegerEncodingTransform iet(this);
- // iet.doTransform();
+ DecomposeOrderTransform dot(this);
+ dot.doTransform();
- //EncodingGraph eg(this);
- //eg.buildGraph();
- //eg.encode();
+ IntegerEncodingTransform iet(this);
+ iet.doTransform();
+ EncodingGraph eg(this);
+ eg.buildGraph();
+ eg.encode();
+// printConstraints();
naiveEncodingDecision(this);
satEncoder->encodeAllSATEncoder(this);
model_print("Is problem UNSAT after encoding: %d\n", unsat);
return result;
}
+void CSolver::printConstraints() {
+ SetIteratorBooleanEdge *it = getConstraints();
+ while (it->hasNext()) {
+ BooleanEdge b = it->next();
+ if (b.isNegated())
+ model_print("!");
+ b->print();
+ model_print("\n");
+ }
+ delete it;
+
+}
+
uint64_t CSolver::getElementValue(Element *element) {
switch (element->type) {
case ELEMSET: