commit after merge
[satune.git] / src / SatuneJavaAPI.java
1 package edu.tamu.aser.constraints;
2
3 import java.util.HashMap;
4
5 public class SatuneJavaAPI{
6         
7         private static Long order = null;
8         private static Long satune = null;
9         private static SatuneJavaAPI instance = null;
10         public static Long maxRange = 0L;
11
12         private SatuneJavaAPI(){
13             System.loadLibrary("_cons_comp");    // loads lib_cons_comp.so
14             satune = createCCSolver();
15             Long set = createRangeSet(satune, 1, 0, maxRange);
16             order = createOrder(satune, 1, set); // 0= Partial Order, 1 = total order
17         }
18         
19         public static SatuneJavaAPI getInstance(){
20             if(instance == null){
21                 instance = new SatuneJavaAPI();
22             }
23             return instance;
24         }
25         
26         public Long lookupBooleanOrder(Long gid1, Long gid2) {
27             return orderConstraint(satune,order, gid1, gid2);
28         }
29         
30         public void addConstraint(Long constraint){
31             addConstraint(satune, constraint);
32         }
33         
34         public Long LogicalOperationTwo(int op, long arg1, long arg2){
35             return applyLogicalOperationTwo(satune, op, arg1, arg2);
36         }
37         
38         public Long getBooleanTrue(){
39             return getBooleanTrue(satune);
40         }
41         
42         public void print(){
43             printConstraints(satune);
44         }
45         
46         public int solve(){
47             return solve(satune);
48         }
49         private native long createCCSolver();
50         private native void deleteCCSolver(long solver);
51         private native long createSet(long solver, int type, long elements, int num);
52         private native long createRangeSet(long solver,int type, long lowrange, long highrange);
53         private native long createRangeVar(long solver,int type, long lowrange, long highrange);
54         private native long createMutableSet(long solver, int type);
55         private native void addItem(long solver,long set, long element);
56         private native void finalizeMutableSet(long solver,long set);
57         private native long getElementVar(long solver,long set);
58         private native long getElementConst(long solver, int type, long value);
59         private native long getElementRange (long solver,long element);
60         private native long getBooleanVar(long solver, int type);
61         private native long getBooleanTrue(long solver);
62         private native long getBooleanFalse(long solver);
63         private native long createFunctionOperator(long solver, int op, long range, int overflowbehavior);
64         private native long createPredicateOperator(long solver, int op);
65         private native long createPredicateTable(long solver,long table, int behavior);
66         private native long createTable(long solver, long range);
67         private native long createTableForPredicate(long solver);
68         private native void addTableEntry(long solver,long table, long inputs, int inputSize, long result);
69         private native long completeTable(long solver,long table, int behavior);
70         private native long applyFunction(long solver,long function, long array, int numArrays, long overflowstatus);
71         private native long applyPredicateTable(long solver,long predicate, long inputs, int numInputs, long undefinedStatus);
72         private native long applyPredicate(long solver,long predicate, long inputs, int numInputs);
73         private native long applyLogicalOperation(long solver, int op, long array, int asize);
74         private native long applyLogicalOperationTwo(long solver, int op, long arg1, long arg2);
75         private native long applyLogicalOperationOne(long solver, int op, long arg);
76         private native void addConstraint(long solver,long constraint);
77         private native long createOrder(long solver, int type, long set);
78         private native long orderConstraint(long solver,long order, long first, long second);
79         private native int solve(long solver);
80         private native long getElementValue(long solver,long element);
81         private native int getBooleanValue(long solver,long bool);
82         private native int getOrderConstraintValue(long solver,long order, long first, long second);
83         private native void printConstraints(long solver);
84         private native void serialize(long solver);
85         private native void mustHaveValue(long solver, long element);
86         private native void setInterpreter(long solver, int type);
87         private native long clone(long solver);
88
89         public static void main(String[] args)
90         {
91                 SatuneJavaAPI satuneapi = SatuneJavaAPI.getInstance();
92                 long solver = SatuneJavaAPI.getInstance().createCCSolver();
93                 long constr = satuneapi.getBooleanVar(solver, 1);
94                 satuneapi.addConstraint(solver, constr);
95                 int value = satuneapi.solve(solver);
96                 if (value == 1) {
97                         System.out.println("B1 = " + satuneapi.getBooleanValue(solver, constr));
98                 } else {
99                         System.out.println("UNSAT");
100                 }
101                 satuneapi.deleteCCSolver(solver);
102         }
103 }
104
105