#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) {
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");
+}