Skip to content

Commit 4250bbf

Browse files
kfriedbergerbaierd
authored andcommitted
MathSAT: shorten some code and refactor callback-providing method.
This commit unifies the level of abstraction for registering a shutdown-callback and removing the callback afterwards.
1 parent e5a898e commit 4250bbf

File tree

2 files changed

+11
-11
lines changed

2 files changed

+11
-11
lines changed

src/org/sosy_lab/java_smt/solvers/mathsat5/Mathsat5AbstractProver.java

+5-8
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import static org.sosy_lab.java_smt.solvers.mathsat5.Mathsat5NativeApi.msat_pop_backtrack_point;
2525
import static org.sosy_lab.java_smt.solvers.mathsat5.Mathsat5NativeApi.msat_push_backtrack_point;
2626
import static org.sosy_lab.java_smt.solvers.mathsat5.Mathsat5NativeApi.msat_set_option_checked;
27+
import static org.sosy_lab.java_smt.solvers.mathsat5.Mathsat5NativeApi.msat_set_termination_callback;
2728
import static org.sosy_lab.java_smt.solvers.mathsat5.Mathsat5NativeApi.msat_term_get_arg;
2829
import static org.sosy_lab.java_smt.solvers.mathsat5.Mathsat5NativeApi.msat_term_is_boolean_constant;
2930
import static org.sosy_lab.java_smt.solvers.mathsat5.Mathsat5NativeApi.msat_term_is_not;
@@ -99,14 +100,12 @@ private long buildConfig(Set<ProverOptions> opts) {
99100
public boolean isUnsat() throws InterruptedException, SolverException {
100101
Preconditions.checkState(!closed);
101102

102-
long hook = context.addTerminationTest(curEnv);
103-
boolean result;
103+
final long hook = msat_set_termination_callback(curEnv, context.getTerminationTest());
104104
try {
105-
result = !msat_check_sat(curEnv);
105+
return !msat_check_sat(curEnv);
106106
} finally {
107107
msat_free_termination_callback(hook);
108108
}
109-
return result;
110109
}
111110

112111
@Override
@@ -115,14 +114,12 @@ public boolean isUnsatWithAssumptions(Collection<BooleanFormula> pAssumptions)
115114
Preconditions.checkState(!closed);
116115
checkForLiterals(pAssumptions);
117116

118-
long hook = context.addTerminationTest(curEnv);
119-
boolean result;
117+
final long hook = msat_set_termination_callback(curEnv, context.getTerminationTest());
120118
try {
121-
result = !msat_check_sat_with_assumptions(curEnv, getMsatTerm(pAssumptions));
119+
return !msat_check_sat_with_assumptions(curEnv, getMsatTerm(pAssumptions));
122120
} finally {
123121
msat_free_termination_callback(hook);
124122
}
125-
return result;
126123
}
127124

128125
private void checkForLiterals(Collection<BooleanFormula> formulas) {

src/org/sosy_lab/java_smt/solvers/mathsat5/Mathsat5SolverContext.java

+6-3
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
import static org.sosy_lab.java_smt.solvers.mathsat5.Mathsat5NativeApi.msat_destroy_env;
1818
import static org.sosy_lab.java_smt.solvers.mathsat5.Mathsat5NativeApi.msat_get_version;
1919
import static org.sosy_lab.java_smt.solvers.mathsat5.Mathsat5NativeApi.msat_set_option_checked;
20-
import static org.sosy_lab.java_smt.solvers.mathsat5.Mathsat5NativeApi.msat_set_termination_callback;
2120

2221
import com.google.common.annotations.VisibleForTesting;
2322
import com.google.common.base.Preconditions;
@@ -300,9 +299,13 @@ public void close() {
300299
}
301300
}
302301

303-
long addTerminationTest(long env) {
302+
/**
303+
* Get a termination callback for the current context. The callback can be registered upfront,
304+
* i.e., before calling a possibly expensive computation in the solver to allow a proper shutdown.
305+
*/
306+
TerminationCallback getTerminationTest() {
304307
Preconditions.checkState(!closed, "solver context is already closed");
305-
return msat_set_termination_callback(env, terminationTest);
308+
return terminationTest;
306309
}
307310

308311
@Override

0 commit comments

Comments
 (0)