Adding sypet to repo
[Benchmarks_CSolver.git] / sypet-non-incremental / src / satune / SatuneJavaAPI.java
diff --git a/sypet-non-incremental/src/satune/SatuneJavaAPI.java b/sypet-non-incremental/src/satune/SatuneJavaAPI.java
new file mode 100644 (file)
index 0000000..6203635
--- /dev/null
@@ -0,0 +1,188 @@
+package satune;
+
+import java.util.HashMap;
+import java.util.List;
+
+public class SatuneJavaAPI{
+       static {
+           System.loadLibrary("_cons_comp");    // loads lib_cons_comp.so
+       }
+        private Long satune = null;
+       private Long equalPredicate;
+
+        public SatuneJavaAPI(){
+               satune = createCCSolver();
+               equalPredicate = createPredicateOperator(satune, CompOp.SATC_EQUALS.getValue());
+       }
+       
+       public long blockingPreviousResultConstraint(List<Long> elements){
+               long constraints [] = new long[elements.size()];
+               for(int i=0; i< elements.size(); i++){
+                       long value = getElementValue(elements.get(i));
+                       long constr = applyPredicate(CompOp.SATC_EQUALS, elements.get(i), (int)value);
+                       constraints[i] = applyLogicalOperationOne(satune, LogicOp.SATC_NOT.getValue(), constr);
+               }
+               return applyLogicalOperation(LogicOp.SATC_OR.getValue(), constraints);
+       }
+       
+       public Long createElement(List<Integer> domain){
+               return createElement(domain, false);
+       }
+       
+       public Long createElement(List<Integer> domain, boolean freeze){
+               
+               long domainArray [] = new long [domain.size()];
+               for ( int i = 0; i< domain.size(); i++){
+                       domainArray[i] = domain.get(i);
+               }
+               long set = createSet(satune, 1, domainArray);
+               long el = getElementVar(satune,set);
+               if(freeze){
+                       freezeElement(el);
+               }
+               return el;
+       }
+       
+       public Long applyPredicate(CompOp op, Long element, int value){
+               Long predicate = getPredicate(op);
+               long inputs [] = {element, getElementConst(satune, 1, (long)value)};
+               return applyPredicate(satune, predicate, inputs);
+       }
+       
+       public Long applyExactlyOneConstraint(long array[]){
+               return applyExactlyOneConstraint(satune, array);
+       }
+        
+        public void addConstraint(Long constraint){
+               addConstraint(satune, constraint);
+        }
+       
+       public Long applyLogicalOperation(int op, long array[]){
+               return applyLogicalOperation(satune, op, array);
+       }
+        
+        public Long applyLogicalOperation(int op, long arg1, long arg2){
+               return applyLogicalOperationTwo(satune, op, arg1, arg2);
+        }
+       
+       public void atLeastOneValue(long element){
+               mustHaveValue(satune, element);
+       }
+        
+        public Long getBooleanTrue(){
+               return getBooleanTrue(satune);
+        }
+        
+        public void print(){
+               printConstraints(satune);
+        }
+       
+        public void turnOffOptimizations(){
+               turnoffOptimizations(satune);
+        }
+       
+        public int solve(){
+               return solve(satune);
+        }
+       
+        public int solveIncremental(){
+               return solveIncremental(satune);
+        }
+        
+        public void serialize(){
+               serialize(satune);
+        }
+        
+        public void resetSolver(){
+               resetCCSolver(satune);
+        }
+       
+       public void deleteSolver(){
+               deleteCCSolver(satune);
+               satune = null;
+       }
+        
+        public void printConstraint(long constraint){
+            printConstraint(satune, constraint);
+        }
+       
+       public long getElementValue(long element){
+               return getElementValue(satune, element);
+       }
+       
+       public void freezeElement(long element){
+               freezeElement(satune, element);
+       }
+       
+       protected Long getPredicate(CompOp op){
+               switch(op){
+                       case SATC_EQUALS: return equalPredicate;
+                       default:
+                               assert false;
+               }
+               return null;
+       }
+        
+        private native long createCCSolver();
+       private native void deleteCCSolver(long solver);
+       private native void resetCCSolver(long solver);
+       private native long createSet(long solver, int type, long [] elements);
+       private native long createRangeSet(long solver,int type, long lowrange, long highrange);
+       private native long createRangeVar(long solver,int type, long lowrange, long highrange);
+       private native long createMutableSet(long solver, int type);
+       private native void addItem(long solver,long set, long element);
+       private native void finalizeMutableSet(long solver,long set);
+       private native long getElementVar(long solver,long set);
+       private native long getElementConst(long solver, int type, long value);
+       private native long getElementRange (long solver,long element);
+       private native long getBooleanVar(long solver, int type);
+        private native long getBooleanTrue(long solver);
+        private native long getBooleanFalse(long solver);
+       private native long createFunctionOperator(long solver, int op, long range, int overflowbehavior);
+       private native long createPredicateOperator(long solver, int op);
+       private native long createPredicateTable(long solver,long table, int behavior);
+       private native long createTable(long solver, long range);
+       private native long createTableForPredicate(long solver);
+       private native void addTableEntry(long solver,long table, long inputs, int inputSize, long result);
+       private native long completeTable(long solver,long table, int behavior);
+       private native long applyFunction(long solver,long function, long array, int numArrays, long overflowstatus);
+       private native long applyPredicateTable(long solver,long predicate, long inputs[], long undefinedStatus);
+       private native long applyPredicate(long solver,long predicate, long inputs []);
+       private native long applyLogicalOperation(long solver, int op, long array[]);
+       private native long applyExactlyOneConstraint(long solver, long array[]);
+       private native long applyLogicalOperationTwo(long solver, int op, long arg1, long arg2);
+       private native long applyLogicalOperationOne(long solver, int op, long arg);
+       private native void addConstraint(long solver,long constraint);
+       private native void printConstraint(long solver,long constraint);
+       private native long createOrder(long solver, int type, long set);
+       private native long orderConstraint(long solver,long order, long first, long second);
+       private native int solve(long solver);
+       private native int solveIncremental(long solver);
+       private native long getElementValue(long solver,long element);
+       private native void freezeElement(long solver,long element);
+       private native int getBooleanValue(long solver,long bool);
+       private native int getOrderConstraintValue(long solver,long order, long first, long second);
+       private native void printConstraints(long solver);
+       private native void turnoffOptimizations(long solver);
+       private native void serialize(long solver);
+       private native void mustHaveValue(long solver, long element);
+       private native void setInterpreter(long solver, int type);
+       private native long clone(long solver);
+
+//     public static void main(String[] args)
+//     {
+//             SatuneJavaAPI satuneapi = new SatuneJavaAPI();
+//             long solver = satuneapi.createCCSolver();
+//             long constr = satuneapi.getBooleanVar(solver, 1);
+//             satuneapi.addConstraint(solver, constr);
+//             int value = satuneapi.solve(solver);
+//             if (value == 1) {
+//                     System.out.println("B1 = " + satuneapi.getBooleanValue(solver, constr));
+//             } else {
+//                     System.out.println("UNSAT");
+//             }
+//             satuneapi.deleteCCSolver(solver);
+//     }
+}
+
+