Finish clone
[satune.git] / src / AST / order.cc
1 #include "order.h"
2 #include "structs.h"
3 #include "set.h"
4 #include "boolean.h"
5 #include "ordergraph.h"
6 #include "csolver.h"
7
8 Order::Order(OrderType _type, Set *_set) :
9         type(_type),
10         set(_set),
11         orderPairTable(NULL),
12         elementTable(NULL),
13         graph(NULL),
14         order(this)
15 {
16 }
17
18 void Order::initializeOrderHashTable() {
19         orderPairTable = new HashTableOrderPair();
20 }
21
22 void Order::initializeOrderElementsHashTable() {
23         elementTable = new HashSetOrderElement();
24 }
25
26 void Order::addOrderConstraint(BooleanOrder *constraint) {
27         constraints.push(constraint);
28 }
29
30 void Order::setOrderEncodingType(OrderEncodingType type) {
31         order.type = type;
32 }
33
34 Order *Order::clone(CSolver *solver, CloneMap *map) {
35         Order *o = (Order *)map->get(this);
36         if (o != NULL)
37                 return o;
38         o = solver->createOrder(type, set->clone(solver, map));
39         map->put(this, o);
40         return o;
41 }
42
43 Order::~Order() {
44         if (orderPairTable != NULL) {
45                 orderPairTable->resetanddelete();
46                 delete orderPairTable;
47         }
48         if (elementTable != NULL) {
49                 delete elementTable;
50         }
51         if (graph != NULL) {
52                 delete graph;
53         }
54 }