Merge branch 'master' of ssh://demsky.eecs.uci.edu/home/git/constraint_compiler into...
[satune.git] / src / AST / order.cc
index cdc3d52c9efdea7d98d21002dccc4a6e2b183745..609b4691e0db641ef15c24682595417b71478937 100644 (file)
@@ -3,42 +3,45 @@
 #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;
        }
 }