X-Git-Url: http://plrg.eecs.uci.edu/git/?p=satune.git;a=blobdiff_plain;f=src%2FSatuneJavaAPI.java;h=a5e71d3c39e21baba983758d35ac8db990dfbfc0;hp=a2c35f3b51b9526eb7ddc6361eda177b90bcf760;hb=974a00584da88dce9c638bd5fd981f2164176e2c;hpb=860bf6b84ae2317d04e6c6494e4bc9ad824786b9 diff --git a/src/SatuneJavaAPI.java b/src/SatuneJavaAPI.java index a2c35f3..a5e71d3 100644 --- a/src/SatuneJavaAPI.java +++ b/src/SatuneJavaAPI.java @@ -1,50 +1,100 @@ +package edu.tamu.aser.constraints; + +import java.util.HashMap; public class SatuneJavaAPI{ - static { - System.loadLibrary("_cons_comp"); // loads lib_cons_comp.so - } - public native long createCCSolver(); - public native void deleteCCSolver(long solver); - public native long createSet(long solver, int type, long elements, int num); - public native long createRangeSet(long solver,int type, long lowrange, long highrange); - public native long createRangeVar(long solver,int type, long lowrange, long highrange); - public native long createMutableSet(long solver, int type); - public native void addItem(long solver,long set, long element); - public native void finalizeMutableSet(long solver,long set); - public native long getElementVar(long solver,long set); - public native long getElementConst(long solver, int type, long value); - public native long getElementRange (long solver,long element); - public native long getBooleanVar(long solver, int type); - public native long createFunctionOperator(long solver, int op, long range, int overflowbehavior); - public native long createPredicateOperator(long solver, int op); - public native long createPredicateTable(long solver,long table, int behavior); - public native long createTable(long solver, long range); - public native long createTableForPredicate(long solver); - public native void addTableEntry(long solver,long table, long inputs, int inputSize, long result); - public native long completeTable(long solver,long table, int behavior); - public native long applyFunction(long solver,long function, long array, int numArrays, long overflowstatus); - public native long applyPredicateTable(long solver,long predicate, long inputs, int numInputs, long undefinedStatus); - public native long applyPredicate(long solver,long predicate, long inputs, int numInputs); - public native long applyLogicalOperation(long solver, int op, long array, int asize); - public native long applyLogicalOperationTwo(long solver, int op, long arg1, long arg2); - public native long applyLogicalOperationOne(long solver, int op, long arg); - public native void addConstraint(long solver,long constraint); - public native long createOrder(long solver, int type, long set); - public native long orderConstraint(long solver,long order, long first, long second); - public native int solve(long solver); - public native long getElementValue(long solver,long element); - public native int getBooleanValue(long solver,long bool); - public native int getOrderConstraintValue(long solver,long order, long first, long second); - public native void printConstraints(long solver); - public native void serialize(long solver); - public native void mustHaveValue(long solver, long element); - public native void setInterpreter(long solver, int type); - public native long clone(long solver); + + private static Long order = null; + private static Long satune = null; + private static SatuneJavaAPI instance = null; + public static Long maxRange = 0L; + + private SatuneJavaAPI(){ + System.loadLibrary("_cons_comp"); // loads lib_cons_comp.so + satune = createCCSolver(); + Long set = createRangeSet(satune, 1, 0, maxRange); + order = createOrder(satune, 1, set); // 0= Partial Order, 1 = total order + } + + public static SatuneJavaAPI getInstance(){ + if(instance == null){ + instance = new SatuneJavaAPI(); + } + return instance; + } + + public Long lookupBooleanOrder(Long gid1, Long gid2) { + return orderConstraint(satune,order, gid1, gid2); + } + + public void addConstraint(Long constraint){ + addConstraint(satune, constraint); + } + + public Long LogicalOperationTwo(int op, long arg1, long arg2){ + return applyLogicalOperationTwo(satune, op, arg1, arg2); + } + + public Long getBooleanTrue(){ + return getBooleanTrue(satune); + } + + public void print(){ + printConstraints(satune); + } + + public void turnoffOptimizations(){ + turnoffOptimizations(satune); + } + + public int solve(){ + return solve(satune); + } + private native long createCCSolver(); + private native void deleteCCSolver(long solver); + private native long createSet(long solver, int type, long elements, int num); + 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, int numInputs, long undefinedStatus); + private native long applyPredicate(long solver,long predicate, long inputs, int numInputs); + private native long applyLogicalOperation(long solver, int op, long array, int asize); + 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 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 long getElementValue(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(); + SatuneJavaAPI satuneapi = SatuneJavaAPI.getInstance(); + long solver = SatuneJavaAPI.getInstance().createCCSolver(); long constr = satuneapi.getBooleanVar(solver, 1); satuneapi.addConstraint(solver, constr); int value = satuneapi.solve(solver);