BooleanOrder (de)serialization works ...
[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 }