Order *clone(CSolver *solver, CloneMap *map);
Vector<BooleanOrder *> constraints;
OrderEncoding encoding;
- void setOrderResolver(OrderResolver *_resolver) { encoding.resolver = _resolver;};
+ void setOrderResolver(OrderResolver *_resolver) { ASSERT(encoding.resolver == NULL); encoding.resolver = _resolver;};
void initializeOrderHashtable();
void initializeOrderElementsHashtable();
void addOrderConstraint(BooleanOrder *constraint);
OrderGraph *buildOrderGraph(Order *order) {
OrderGraph *orderGraph = new OrderGraph(order);
+ order->graph = orderGraph;
uint constrSize = order->constraints.getSize();
for (uint j = 0; j < constrSize; j++) {
orderGraph->addOrderConstraintToOrderGraph(order->constraints.get(j));
}
}
- /*
+
bool mustReachPrune = GETVARTUNABLE(solver->getTuner(), order->type, MUSTREACHPRUNE, &onoff);
if (mustReachPrune)
removeMustBeTrueNodes(solver, graph);
- */
//This is needed for splitorder
computeStronglyConnectedComponentGraph(graph);
decomposeOrder(order, graph);
- delete graph;
}
delete orderit;
delete orders;
encodingRecord = new IntegerEncodingRecord(
solver->createRangeSet(currOrder->set->getType(), 0, (uint64_t) currOrder->set->getSize() - 1));
orderIntEncoding->put(currOrder, encodingRecord);
+ currOrder->setOrderEncodingType( INTEGERENCODING );
} else {
encodingRecord = orderIntEncoding->get(currOrder);
}
return;
}
case ORDERCONST: {
- ((BooleanOrder *) This)->order->setOrderEncodingType(PAIRWISE);
+ if(((BooleanOrder *) This)->order->encoding.type == ORDER_UNASSIGNED)
+ ((BooleanOrder *) This)->order->setOrderEncodingType(PAIRWISE);
return;
}
case LOGICOP: {
BooleanEdge b2 = solver->orderConstraint(order, 1, 4);
solver->addConstraint(b1);
solver->addConstraint(b2);
- if (solver->solve() == 1)
+ if (solver->solve() == 1){
printf("SAT\n");
- else
+ printf("O(5,1)=%d O(1,4)=%d O(5,4)=%d O(1,5)=%d\n",
+ solver->getOrderConstraintValue(order, 5, 1),
+ solver->getOrderConstraintValue(order, 1, 4),
+ solver->getOrderConstraintValue(order, 5, 4),
+ solver->getOrderConstraintValue(order, 1, 5));
+ } else {
printf("UNSAT\n");
+ }
delete solver;
}
long long startTime = getTimeNano();
computePolarities(this);
- DecomposeOrderTransform dot(this);
- dot.doTransform();
+// DecomposeOrderTransform dot(this);
+// dot.doTransform();
- //This leaks like crazy
- // IntegerEncodingTransform iet(this);
- //iet.doTransform();
+ IntegerEncodingTransform iet(this);
+ iet.doTransform();
naiveEncodingDecision(this);
satEncoder->encodeAllSATEncoder(this);