Add Const API to frontend
[satune.git] / src / AST / order.c
index dd233b644bd2964e2566d83019897b470f167dbc..92c52ae64069a575a64d538284333fa924fd4c9c 100644 (file)
@@ -1,37 +1,36 @@
 #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);
 }