#include "order.h"
#include "structs.h"
#include "set.h"
+#include "boolean.h"
-
-Order* allocOrder(enum OrderType type, Set * set){
- Order* order = (Order*)ourmalloc(sizeof(Order));
- order->set=set;
- order->constraints = allocDefVectorBoolean();
- order->type=type;
- return order;
+Order* allocOrder(OrderType type, Set * set){
+ Order* This = (Order*)ourmalloc(sizeof(Order));
+ This->set=set;
+ initDefVectorBoolean(& This->constraints);
+ This->type=type;
+ initOrderEncoding(& This->order, This);
+ This->orderPairTable = NULL;
+ return This;
}
-Boolean* getOrderConstraint(Order* order, uint64_t first, uint64_t second){
- //Probably a bad idea to do a O(n) search through the order...
- //We have a hashset data structure, why not use it for O(1) search
+void initializeOrderHashTable(Order* This){
+ This->orderPairTable=allocHashTableOrderPair(HT_INITIAL_CAPACITY, HT_DEFAULT_FACTOR);
+}
+void addOrderConstraint(Order* This, BooleanOrder* constraint){
+ pushVectorBoolean( &This->constraints, (Boolean*) constraint);
+}
- //We don't like warnings
- return NULL;
+void setOrderEncodingType(Order* This, OrderEncodingType type){
+ This->order.type = type;
+}
- /*
- uint size = getSizeVectorInt(order->set->members);
- //First we need to make sure that first and second are part of the list!
- bool exist1=false, exist2=false;
- for(int i=0; i<size; i++){
- if(getVectorInt(order->set->members, i)==first){
- exist1=true;
- }else if(getVectorInt(order->set->members, i) == second){
- exist2=true;
- }else if(exist1 && exist2){
- break;
- }
- }
- ASSERT(exist1 && exist2);
- */
+void deleteOrder(Order* This){
+ deleteVectorArrayBoolean(& This->constraints);
+ deleteOrderEncoding(& This->order);
+ if(This->orderPairTable != NULL) {
+ resetAndDeleteHashTableOrderPair(This->orderPairTable);
+ deleteHashTableOrderPair(This->orderPairTable);
+ }
+ ourfree(This);
}