Skip to content

Commit d2bfe1d

Browse files
FormulaManagers
1 parent b3119cf commit d2bfe1d

11 files changed

+306
-122
lines changed

src/org/sosy_lab/java_smt/solvers/stp/StpAbstractProver.java

+50-20
Original file line numberDiff line numberDiff line change
@@ -19,46 +19,71 @@
1919
*/
2020
package org.sosy_lab.java_smt.solvers.stp;
2121

22+
import com.google.common.base.Preconditions;
2223
import java.util.Collection;
2324
import java.util.List;
2425
import java.util.Optional;
2526
import java.util.Set;
26-
import org.checkerframework.checker.nullness.qual.Nullable;
27+
import org.sosy_lab.common.ShutdownNotifier;
2728
import org.sosy_lab.java_smt.api.BooleanFormula;
2829
import org.sosy_lab.java_smt.api.Model;
2930
import org.sosy_lab.java_smt.api.SolverContext.ProverOptions;
3031
import org.sosy_lab.java_smt.api.SolverException;
3132
import org.sosy_lab.java_smt.basicimpl.AbstractProver;
3233

33-
class StpAbstractProver<T> extends AbstractProver<T> {
34+
abstract class StpAbstractProver<T> extends AbstractProver<T> {
3435

35-
protected StpAbstractProver(Set<ProverOptions> pOptions) {
36+
private final StpSolverContext context;
37+
private final StpFormulaCreator creator;
38+
private final ShutdownNotifier shutdownNotifier;
39+
// private final long curConfig;
40+
protected final VC currVC;
41+
protected boolean closed;
42+
43+
protected StpAbstractProver(
44+
StpSolverContext pContext,
45+
Set<ProverOptions> pOptions,
46+
StpFormulaCreator pCreator,
47+
ShutdownNotifier pShutdownNotifier) {
3648
super(pOptions);
37-
// TODO Auto-generated constructor stub
49+
context = pContext;
50+
creator = pCreator;
51+
// curConfig = buildConfig(pOptions); //TODO implement configuration handling
52+
currVC = context.createEnvironment(null);// curConfig is to be passed in here
53+
shutdownNotifier = pShutdownNotifier;
3854
}
3955

4056
@Override
4157
public void pop() {
42-
// TODO Auto-generated method stub
43-
58+
Preconditions.checkState(!closed);
59+
StpJavaApi.vc_pop(currVC);
4460
}
4561

46-
@Override
47-
public @Nullable T addConstraint(BooleanFormula pConstraint) throws InterruptedException {
48-
// TODO Auto-generated method stub
49-
return null;
50-
}
51-
52-
@Override
53-
public void push() {
54-
// TODO Auto-generated method stub
55-
56-
}
62+
/*
63+
* @Override public @Nullable T addConstraint(BooleanFormula pConstraint) throws
64+
* InterruptedException { // TODO Auto-generated method stub return null; }
65+
*
66+
* @Override public void push() { // TODO Auto-generated method stub
67+
*
68+
* }
69+
*/
5770

5871
@Override
5972
public boolean isUnsat() throws SolverException, InterruptedException {
60-
// TODO Auto-generated method stub
61-
return false;
73+
// TODO update to use vc_query_with_timeout
74+
75+
// Preconditions.checkState(!closed);
76+
// int result = StpJavaApi.vc_query(curVC, queryExpr)
77+
// if (result == 0) {
78+
// return true;
79+
// } else if (result == 1){
80+
// return false;
81+
// } else if (result == 2) {
82+
// throw new Exception("An error occured in STP during validation");
83+
// }
84+
// throw new Exception("An error occured in STP during validation");
85+
86+
throw new SolverException("NOT MPLEMENTED");
6287
}
6388

6489
@Override
@@ -90,8 +115,13 @@ public List<BooleanFormula> getUnsatCore() {
90115

91116
@Override
92117
public void close() {
93-
// TODO Auto-generated method stub
118+
if (!closed) {
94119

120+
// TODO check if EXPRDELETE is set via vc_setInterfaceFlags
121+
// other we will can delete expression with vc_DeleteExpr
122+
StpJavaApi.vc_Destroy(currVC);
123+
closed = true;
124+
}
95125
}
96126

97127
@Override

src/org/sosy_lab/java_smt/solvers/stp/StpArrayFormulaManager.java

+27-10
Original file line numberDiff line numberDiff line change
@@ -19,41 +19,58 @@
1919
*/
2020
package org.sosy_lab.java_smt.solvers.stp;
2121

22+
import static com.google.common.base.Preconditions.checkArgument;
23+
2224
import org.sosy_lab.java_smt.api.Formula;
2325
import org.sosy_lab.java_smt.api.FormulaType;
26+
import org.sosy_lab.java_smt.api.FormulaType.ArrayFormulaType;
2427
import org.sosy_lab.java_smt.basicimpl.AbstractArrayFormulaManager;
2528

2629
class StpArrayFormulaManager
27-
extends AbstractArrayFormulaManager<Expr, Type, Long, Long> {
30+
extends AbstractArrayFormulaManager<Expr, Type, VC, Long> {
2831

32+
private final VC vc;
2933
public StpArrayFormulaManager(StpFormulaCreator pFormulaCreator) {
3034
super(pFormulaCreator);
31-
// TODO Auto-generated constructor stub
35+
this.vc = pFormulaCreator.getEnv();
3236
}
3337

3438
@Override
3539
protected Expr select(Expr pArray, Expr pIndex) {
36-
// TODO Auto-generated method stub
37-
return null;
40+
boolean checkArray = type_t.ARRAY_TYPE.equals(StpJavaApi.getType(pArray));
41+
checkArgument(checkArray, "Argument not of type ARRAY");
42+
boolean checkIndex = type_t.BITVECTOR_TYPE.equals(StpJavaApi.getType(pIndex));
43+
checkArgument(checkIndex, "Argument not of type BITVECTOR");
44+
45+
return StpJavaApi.vc_readExpr(vc, pArray, pIndex);
3846
}
3947

4048
@Override
4149
protected Expr store(Expr pArray, Expr pIndex, Expr pValue) {
42-
// TODO Auto-generated method stub
43-
return null;
50+
boolean checkArray = type_t.ARRAY_TYPE.equals(StpJavaApi.getType(pArray));
51+
checkArgument(checkArray, "Argument not of type ARRAY");
52+
boolean checkIndex = type_t.BITVECTOR_TYPE.equals(StpJavaApi.getType(pIndex));
53+
checkArgument(checkIndex, "Argument not of type BITVECTOR");
54+
boolean checkValue = type_t.BITVECTOR_TYPE.equals(StpJavaApi.getType(pValue));
55+
checkArgument(checkValue, "Argument not of type BITVECTOR");
56+
57+
return StpJavaApi.vc_writeExpr(vc, pArray, pIndex, pValue);
4458
}
4559

4660
@Override
4761
protected <TI extends Formula, TE extends Formula> Expr
4862
internalMakeArray(String pName, FormulaType<TI> pIndexType, FormulaType<TE> pElementType) {
49-
// TODO Auto-generated method stub
50-
return null;
63+
final ArrayFormulaType<TI, TE> arrayFormulaType =
64+
FormulaType.getArrayType(pIndexType, pElementType);
65+
final Type stpArrayType = toSolverType(arrayFormulaType);
66+
assert "ARRAY".equals(StpJavaApi.typeString(stpArrayType));
67+
68+
return getFormulaCreator().makeVariable(stpArrayType, pName);
5169
}
5270

5371
@Override
5472
protected Expr equivalence(Expr pArray1, Expr pArray2) {
55-
// TODO Auto-generated method stub
56-
return null;
73+
return StpJavaApi.vc_eqExpr(vc, pArray1, pArray2);
5774
}
5875

5976
}

0 commit comments

Comments
 (0)