mirror of
https://github.com/Z3Prover/z3
synced 2025-04-23 09:05:31 +00:00
add ability to register expressions during callback
This commit is contained in:
parent
50d50cdb48
commit
1e95fb44d1
9 changed files with 44 additions and 2 deletions
|
@ -948,6 +948,14 @@ extern "C" {
|
|||
Z3_CATCH_RETURN(0);
|
||||
}
|
||||
|
||||
unsigned Z3_API Z3_solver_propagate_register_cb(Z3_context c, Z3_solver_callback s, Z3_ast e) {
|
||||
Z3_TRY;
|
||||
Z3_solver_propagate_register_cb(c, s, e);
|
||||
RESET_ERROR_CODE();
|
||||
return reinterpret_cast<user_propagator::callback*>(s)->register_cb(to_expr(e));
|
||||
Z3_CATCH_RETURN(0);
|
||||
}
|
||||
|
||||
void Z3_API Z3_solver_propagate_consequence(Z3_context c, Z3_solver_callback s, unsigned num_fixed, unsigned const* fixed_ids, unsigned num_eqs, unsigned const* eq_lhs, unsigned const* eq_rhs, Z3_ast conseq) {
|
||||
Z3_TRY;
|
||||
LOG_Z3_solver_propagate_consequence(c, s, num_fixed, fixed_ids, num_eqs, eq_lhs, eq_rhs, conseq);
|
||||
|
|
|
@ -4030,8 +4030,12 @@ namespace z3 {
|
|||
*/
|
||||
|
||||
unsigned add(expr const& e) {
|
||||
assert(s);
|
||||
return Z3_solver_propagate_register(ctx(), *s, e);
|
||||
if (cb)
|
||||
return Z3_solver_propagate_register_cb(ctx(), cb, e);
|
||||
if (s)
|
||||
return Z3_solver_propagate_register(ctx(), *s, e);
|
||||
assert(false);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void conflict(unsigned num_fixed, unsigned const* fixed) {
|
||||
|
|
|
@ -6685,6 +6685,16 @@ extern "C" {
|
|||
|
||||
unsigned Z3_API Z3_solver_propagate_register(Z3_context c, Z3_solver s, Z3_ast e);
|
||||
|
||||
/**
|
||||
\brief register an expression to propagate on with the solver.
|
||||
Only expressions of type Bool and type Bit-Vector can be registered for propagation.
|
||||
Unlike \ref Z3_solver_propagate_register, this function takes a solver callback context
|
||||
as argument. It can be invoked during a callback to register new expressions.
|
||||
|
||||
def_API('Z3_solver_propagate_register_cb', UINT, (_in(CONTEXT), _in(SOLVER_CALLBACK), _in(AST)))
|
||||
*/
|
||||
unsigned Z3_API Z3_solver_propagate_register_cb(Z3_context c, Z3_solver_callback cb, Z3_ast e);
|
||||
|
||||
/**
|
||||
\brief propagate a consequence based on fixed values.
|
||||
This is a callback a client may invoke during the fixed_eh callback.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue