315b112d1c2aae07dec86b71dfb8a7db345e29a1
[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 #include "orderpairresolver.h"
8
9 Order::Order(OrderType _type, Set *_set) :
10         type(_type),
11         set(_set),
12         graph(NULL),
13         encoding(this)
14 {
15 }
16
17 void Order::addOrderConstraint(BooleanOrder *constraint) {
18         constraints.push(constraint);
19 }
20
21 void Order::setOrderEncodingType(OrderEncodingType type) {
22         encoding.type = type;
23 }
24
25 Order *Order::clone(CSolver *solver, CloneMap *map) {
26         Order *o = (Order *)map->get(this);
27         if (o != NULL)
28                 return o;
29         o = solver->createOrder(type, set->clone(solver, map));
30         map->put(this, o);
31         return o;
32 }
33
34 HashtableOrderPair *Order::getOrderPairTable() {
35         ASSERT( encoding.resolver != NULL);
36         if (OrderPairResolver *t = dynamic_cast<OrderPairResolver *>(encoding.resolver)) {
37                 return t->getOrderPairTable();
38         } else {
39                 ASSERT(0);
40         }
41 }
42
43 Order::~Order() {
44         if (graph != NULL) {
45                 delete graph;
46         }
47 }
48
49 void Order::serialize(Serializer *serializer) {
50         if (serializer->isSerialized(this))
51                 return;
52         serializer->addObject(this);
53         set->serialize(serializer);
54         ASTNodeType asttype = ORDERTYPE;
55         serializer->mywrite(&asttype, sizeof(ASTNodeType));
56         Order *This = this;
57         serializer->mywrite(&This, sizeof(Order *));
58         serializer->mywrite(&type, sizeof(OrderType));
59         serializer->mywrite(&set, sizeof(Set *));
60 }
61
62 void Order::print() {
63         model_print("{Order<%p> on Set:\n", this);
64         set->print();
65         model_print("}\n");
66 }