Support for pruning unused order elements
[satune.git] / src / AST / order.cc
index 0944bcae0e3b5ae9602ce351bbc25faeffe54eaa..82e4c5329d591b0826704c750e80cc62ff50c3c5 100644 (file)
@@ -4,27 +4,24 @@
 #include "boolean.h"
 #include "ordergraph.h"
 #include "csolver.h"
+#include "orderpairresolver.h"
 
 Order::Order(OrderType _type, Set *_set) :
        type(_type),
        set(_set),
-       orderPairTable(NULL),
        graph(NULL),
-       order(this)
+       encoding(this)
 {
 }
 
-void Order::initializeOrderHashTable() {
-       orderPairTable = new HashTableOrderPair();
-}
-
-
 void Order::addOrderConstraint(BooleanOrder *constraint) {
        constraints.push(constraint);
+       useditems.add(constraint->first);
+       useditems.add(constraint->second);
 }
 
 void Order::setOrderEncodingType(OrderEncodingType type) {
-       order.type = type;
+       encoding.type = type;
 }
 
 Order *Order::clone(CSolver *solver, CloneMap *map) {
@@ -36,13 +33,36 @@ Order *Order::clone(CSolver *solver, CloneMap *map) {
        return o;
 }
 
-Order::~Order() {
-       if (orderPairTable != NULL) {
-               orderPairTable->resetanddelete();
-               delete orderPairTable;
+HashtableOrderPair *Order::getOrderPairTable() {
+       ASSERT( encoding.resolver != NULL);
+       if (OrderPairResolver *t = dynamic_cast<OrderPairResolver *>(encoding.resolver)) {
+               return t->getOrderPairTable();
+       } else {
+               ASSERT(0);
        }
-       
+}
+
+Order::~Order() {
        if (graph != NULL) {
                delete graph;
        }
 }
+
+void Order::serialize(Serializer *serializer) {
+       if (serializer->isSerialized(this))
+               return;
+       serializer->addObject(this);
+       set->serialize(serializer);
+       ASTNodeType asttype = ORDERTYPE;
+       serializer->mywrite(&asttype, sizeof(ASTNodeType));
+       Order *This = this;
+       serializer->mywrite(&This, sizeof(Order *));
+       serializer->mywrite(&type, sizeof(OrderType));
+       serializer->mywrite(&set, sizeof(Set *));
+}
+
+void Order::print() {
+       model_print("{Order<%p> on Set:\n", this);
+       set->print();
+       model_print("}\n");
+}