3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2026-02-13 04:13:01 +00:00

Modern C++: Add std::span overload for mk_or, adopt std::clamp, optimize stream output (#8507)

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
This commit is contained in:
Copilot 2026-02-06 11:54:06 +00:00 committed by GitHub
parent 384a8e291b
commit bb35267e46
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 19 additions and 20 deletions

View file

@ -2206,6 +2206,7 @@ public:
app * mk_xor(ref_buffer<expr, ast_manager> const& args) { return mk_xor(args.size(), args.data()); }
app * mk_or(unsigned num_args, expr * const * args) { return mk_app(basic_family_id, OP_OR, num_args, args); }
app * mk_and(std::span<expr* const> args) { return mk_app(basic_family_id, OP_AND, args); }
app * mk_or(std::span<expr* const> args) { return mk_app(basic_family_id, OP_OR, args); }
app * mk_or(expr * arg1, expr * arg2) { return mk_app(basic_family_id, OP_OR, arg1, arg2); }
app * mk_and(expr * arg1, expr * arg2) { return mk_app(basic_family_id, OP_AND, arg1, arg2); }
app * mk_or(expr * arg1, expr * arg2, expr * arg3) { return mk_app(basic_family_id, OP_OR, arg1, arg2, arg3); }
@ -2216,10 +2217,10 @@ public:
app * mk_and(ptr_vector<expr> const& args) { return mk_and(std::span<expr* const>(args.data(), args.size())); }
app * mk_and(ref_buffer<expr, ast_manager> const& args) { return mk_and(std::span<expr* const>(args.data(), args.size())); }
app * mk_and(ptr_buffer<expr> const& args) { return mk_and(std::span<expr* const>(args.data(), args.size())); }
app * mk_or(ref_vector<expr, ast_manager> const& args) { return mk_or(args.size(), args.data()); }
app * mk_or(ptr_vector<expr> const& args) { return mk_or(args.size(), args.data()); }
app * mk_or(ref_buffer<expr, ast_manager> const& args) { return mk_or(args.size(), args.data()); }
app * mk_or(ptr_buffer<expr> const& args) { return mk_or(args.size(), args.data()); }
app * mk_or(ref_vector<expr, ast_manager> const& args) { return mk_or(std::span<expr* const>(args.data(), args.size())); }
app * mk_or(ptr_vector<expr> const& args) { return mk_or(std::span<expr* const>(args.data(), args.size())); }
app * mk_or(ref_buffer<expr, ast_manager> const& args) { return mk_or(std::span<expr* const>(args.data(), args.size())); }
app * mk_or(ptr_buffer<expr> const& args) { return mk_or(std::span<expr* const>(args.data(), args.size())); }
app * mk_implies(expr * arg1, expr * arg2) { return mk_app(basic_family_id, OP_IMPLIES, arg1, arg2); }
app * mk_not(expr * n) { return mk_app(basic_family_id, OP_NOT, n); }
app * mk_distinct(unsigned num_args, expr * const * args);

View file

@ -284,14 +284,14 @@ namespace euf {
out << " " << c.m_label->get_name() << " " << c.m_oreg;
for (unsigned i = 0; i < c.m_num_args; ++i)
out << " " << c.m_iregs[i];
out << ")";
out << ')';
}
void display_is_cgr(std::ostream & out, const is_cgr & c) {
out << "(IS_CGR " << c.m_label->get_name() << " " << c.m_ireg;
for (unsigned i = 0; i < c.m_num_args; ++i)
out << " " << c.m_iregs[i];
out << ")";
out << ')';
}
void display_yield(std::ostream & out, const yield & y) {

View file

@ -522,7 +522,7 @@ struct nnf::imp {
app * r;
if (fr.m_pol)
r = m.mk_or(2, m_result_stack.data() + fr.m_spos);
r = m.mk_or(std::span<expr* const>(m_result_stack.data() + fr.m_spos, 2));
else
r = m.mk_and(std::span<expr* const>(m_result_stack.data() + fr.m_spos, 2));

View file

@ -391,7 +391,7 @@ bool bound_propagator::relevant_bound(var x, double new_k) const {
if (abs_k < 0.0)
abs_k -= abs_k;
if (bounded)
improvement = m_threshold * std::max(std::min(interval_size, abs_k), 1.0);
improvement = m_threshold * std::clamp(interval_size, 1.0, abs_k);
else
improvement = m_threshold * std::max(abs_k, 1.0);

View file

@ -580,7 +580,7 @@ void substitution_tree::display(std::ostream & out, subst const & s) const {
out << "(" << to_app(s.second)->get_decl()->get_name();
for (unsigned i = 0; i < num; ++i)
out << " r!" << to_var(to_app(s.second)->get_arg(i))->get_idx();
out << ")";
out << ')';
}
}
else {