Adding new API for defining an order constraint on two orders...
authorHamed <hamed.gorjiara@gmail.com>
Wed, 9 Aug 2017 00:38:46 +0000 (17:38 -0700)
committerHamed <hamed.gorjiara@gmail.com>
Wed, 9 Aug 2017 00:38:46 +0000 (17:38 -0700)
src/AST/boolean.c
src/AST/boolean.h
src/AST/ops.h
src/classlist.h
src/csolver.c
src/csolver.h

index 09ec2ae..a984515 100644 (file)
@@ -28,6 +28,20 @@ Boolean* allocBooleanOrder(Order* order, uint64_t first, uint64_t second) {
        return & This -> base;
 }
 
+Boolean * allocBooleanInterOrder(Order * order1, uint64_t first,Order* order2, uint64_t second){
+       BooleanInterOrder* This=(BooleanInterOrder *) ourmalloc(sizeof (BooleanInterOrder));
+       GETBOOLEANTYPE(This)=INTERORDERCONST;
+       GETBOOLEANVALUE(This) = BV_UNDEFINED;
+       GETBOOLEANPOLARITY(This) = P_UNDEFINED;
+       This->order1=order1;
+       This->order2 = order2;
+       This->first=first;
+       This->second=second;
+       pushVectorBoolean(&order1->constraints, &This->base);
+       initDefVectorBoolean(GETBOOLEANPARENTS(This));
+       return & This -> base;
+}
+
 Boolean * allocBooleanPredicate(Predicate * predicate, Element ** inputs, uint numInputs, Boolean* undefinedStatus){
        BooleanPredicate* This = (BooleanPredicate*) ourmalloc(sizeof(BooleanPredicate));
        GETBOOLEANTYPE(This)= PREDICATEOP;
index b24fa3f..eb3b02c 100644 (file)
@@ -31,6 +31,15 @@ struct BooleanOrder {
        uint64_t second;
 };
 
+//I don't like the name, we may want to change it later --HG
+struct BooleanInterOrder{
+       Boolean base;
+       Order* order1;
+       uint64_t first;
+       Order* order2;
+       uint64_t second;
+};
+
 struct BooleanVar {
        Boolean base;
        VarType vtype;
@@ -53,6 +62,7 @@ struct BooleanPredicate {
 
 Boolean * allocBooleanVar(VarType t);
 Boolean * allocBooleanOrder(Order * order, uint64_t first, uint64_t second);
+Boolean * allocBooleanInterOrder(Order * order1, uint64_t first,Order* order2, uint64_t second);
 Boolean * allocBooleanPredicate(Predicate * predicate, Element ** inputs, uint numInputs, Boolean* undefinedStatus);
 Boolean * allocBooleanLogicArray(CSolver *solver, LogicOp op, Boolean ** array, uint asize);
 void deleteBoolean(Boolean * This);
index 9e8113d..e607898 100644 (file)
@@ -35,7 +35,7 @@ typedef enum FunctionType FunctionType;
 enum PredicateType {TABLEPRED, OPERATORPRED};
 typedef enum PredicateType PredicateType;
 
-enum ASTNodeType {ORDERCONST, BOOLEANVAR, LOGICOP, PREDICATEOP, ELEMSET, ELEMFUNCRETURN, ELEMCONST};
+enum ASTNodeType {INTERORDERCONST, ORDERCONST, BOOLEANVAR, LOGICOP, PREDICATEOP, ELEMSET, ELEMFUNCRETURN, ELEMCONST};
 typedef enum ASTNodeType ASTNodeType;
 
 enum Polarity {P_UNDEFINED, P_TRUE, P_FALSE, P_BOTHTRUEFALSE};
index 2079d9b..0e3d287 100644 (file)
@@ -22,6 +22,7 @@ struct SATEncoder;
 typedef struct SATEncoder SATEncoder;
 
 typedef struct BooleanOrder BooleanOrder;
+typedef struct BooleanInterOrder BooleanInterOrder;
 typedef struct BooleanVar BooleanVar;
 typedef struct BooleanLogic BooleanLogic;
 typedef struct BooleanPredicate BooleanPredicate;
index d440aad..126caa6 100644 (file)
@@ -193,6 +193,12 @@ Boolean * orderConstraint(CSolver *This, Order * order, uint64_t first, uint64_t
        return constraint;
 }
 
+Boolean * interOrderConstraint(CSolver * This, Order * order1, uint64_t first, Order* order2, uint64_t second){
+       Boolean* constraint = allocBooleanInterOrder(order1, first, order2, second);
+       pushVectorBoolean(This->allBooleans, constraint);
+       return constraint;
+}
+
 int startEncoding(CSolver* This){
        naiveEncodingDecision(This);
        SATEncoder* satEncoder = This->satEncoder;
index b35f801..1c76ac8 100644 (file)
@@ -121,6 +121,8 @@ Order * createOrder(CSolver *, OrderType type, Set * set);
 /** This function instantiates a boolean on two items in an order. */
 Boolean * orderConstraint(CSolver *, Order * order, uint64_t first, uint64_t second);
 
+Boolean * interOrderConstraint(CSolver *, Order * order1, uint64_t first, Order* order2, uint64_t second);
+
 /** When everything is done, the client calls this function and then csolver starts to encode*/
 int startEncoding(CSolver*);