mirror of
https://github.com/Z3Prover/z3
synced 2025-06-07 06:33:23 +00:00
add bit-vector extract shortcuts to C++ API
Signed-off-by: nikolajbjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
f0967c0572
commit
3ca3c948cf
2 changed files with 13 additions and 0 deletions
|
@ -975,6 +975,15 @@ void substitute_example() {
|
||||||
std::cout << new_f << std::endl;
|
std::cout << new_f << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void extract_example() {
|
||||||
|
std::cout << "extract example\n";
|
||||||
|
context c;
|
||||||
|
expr x(c);
|
||||||
|
x = c.constant("x", c.bv_sort(32));
|
||||||
|
expr y = x.extract(21, 10);
|
||||||
|
std::cout << y << " " << y.hi() << " " << y.lo() << "\n";
|
||||||
|
}
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
try {
|
try {
|
||||||
demorgan(); std::cout << "\n";
|
demorgan(); std::cout << "\n";
|
||||||
|
@ -1013,6 +1022,7 @@ int main() {
|
||||||
expr_vector_example(); std::cout << "\n";
|
expr_vector_example(); std::cout << "\n";
|
||||||
exists_expr_vector_example(); std::cout << "\n";
|
exists_expr_vector_example(); std::cout << "\n";
|
||||||
substitute_example(); std::cout << "\n";
|
substitute_example(); std::cout << "\n";
|
||||||
|
extract_example(); std::cout << "\n";
|
||||||
std::cout << "done\n";
|
std::cout << "done\n";
|
||||||
}
|
}
|
||||||
catch (exception & ex) {
|
catch (exception & ex) {
|
||||||
|
|
|
@ -866,6 +866,9 @@ namespace z3 {
|
||||||
friend expr operator|(int a, expr const & b) { return b.ctx().num_val(a, b.get_sort()) | b; }
|
friend expr operator|(int a, expr const & b) { return b.ctx().num_val(a, b.get_sort()) | b; }
|
||||||
|
|
||||||
friend expr operator~(expr const & a) { Z3_ast r = Z3_mk_bvnot(a.ctx(), a); return expr(a.ctx(), r); }
|
friend expr operator~(expr const & a) { Z3_ast r = Z3_mk_bvnot(a.ctx(), a); return expr(a.ctx(), r); }
|
||||||
|
expr extract(unsigned hi, unsigned lo) const { Z3_ast r = Z3_mk_extract(ctx(), hi, lo, *this); return expr(ctx(), r); }
|
||||||
|
unsigned lo() const { assert (is_app() && Z3_get_decl_num_parameters(ctx(), decl()) == 2); return static_cast<unsigned>(Z3_get_decl_int_parameter(ctx(), decl(), 1)); }
|
||||||
|
unsigned hi() const { assert (is_app() && Z3_get_decl_num_parameters(ctx(), decl()) == 2); return static_cast<unsigned>(Z3_get_decl_int_parameter(ctx(), decl(), 0)); }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
\brief Return a simplified version of this expression.
|
\brief Return a simplified version of this expression.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue