#include "set.h"
#include "boolean.h"
#include "ordergraph.h"
+#include "csolver.h"
+#include "orderpairresolver.h"
Order::Order(OrderType _type, Set *_set) :
type(_type),
set(_set),
- orderPairTable(NULL),
- elementTable(NULL),
graph(NULL),
- order(this)
+ encoding(this)
{
}
-void Order::initializeOrderHashTable() {
- orderPairTable = new HashTableOrderPair();
+void Order::addOrderConstraint(BooleanOrder *constraint) {
+ constraints.push(constraint);
}
-void Order::initializeOrderElementsHashTable() {
- elementTable = new HashSetOrderElement();
+void Order::setOrderEncodingType(OrderEncodingType type) {
+ encoding.type = type;
}
-void Order::addOrderConstraint(BooleanOrder *constraint) {
- constraints.push(constraint);
+Order *Order::clone(CSolver *solver, CloneMap *map) {
+ Order *o = (Order *)map->get(this);
+ if (o != NULL)
+ return o;
+ o = solver->createOrder(type, set->clone(solver, map));
+ map->put(this, o);
+ return o;
}
-void Order::setOrderEncodingType(OrderEncodingType type) {
- order.type = type;
+HashtableOrderPair* Order::getOrderPairTable(){
+ ASSERT( encoding.resolver != NULL);
+ if (OrderPairResolver* t = dynamic_cast<OrderPairResolver*>(encoding.resolver)){
+ return t->getOrderPairTable();
+ } else {
+ ASSERT(0);
+ }
}
Order::~Order() {
- if (orderPairTable != NULL) {
- orderPairTable->resetanddelete();
- delete orderPairTable;
- }
- if (elementTable != NULL) {
- delete elementTable;
- }
if (graph != NULL) {
- deleteOrderGraph(graph);
+ delete graph;
}
}