3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-23 09:05:31 +00:00

remove template Context dependency in every trail object

This commit is contained in:
Nikolaj Bjorner 2021-02-08 15:41:57 -08:00
parent df0a449f70
commit a152bb1e80
65 changed files with 413 additions and 413 deletions

View file

@ -148,36 +148,37 @@ namespace datalog {
//
// -----------------------------------
class context::restore_rules : public trail<context> {
class context::restore_rules : public trail {
context& ctx;
rule_set* m_old_rules;
void reset() {
dealloc(m_old_rules);
m_old_rules = nullptr;
}
public:
restore_rules(rule_set& r): m_old_rules(alloc(rule_set, r)) {}
restore_rules(context& ctx, rule_set& r): ctx(ctx), m_old_rules(alloc(rule_set, r)) {}
~restore_rules() override {}
void undo(context& ctx) override {
void undo() override {
ctx.replace_rules(*m_old_rules);
reset();
}
};
template<typename Ctx, typename Vec>
class restore_vec_size_trail : public trail<Ctx> {
class restore_vec_size_trail : public trail {
Vec& m_vector;
unsigned m_old_size;
public:
restore_vec_size_trail(Vec& v): m_vector(v), m_old_size(v.size()) {}
~restore_vec_size_trail() override {}
void undo(Ctx& ctx) override { m_vector.shrink(m_old_size); }
void undo() override { m_vector.shrink(m_old_size); }
};
void context::push() {
m_trail.push_scope();
m_trail.push(restore_rules(m_rule_set));
m_trail.push(restore_rules(*this, m_rule_set));
m_trail.push(restore_vec_size_trail<context,expr_ref_vector>(m_rule_fmls));
m_trail.push(restore_vec_size_trail<context,expr_ref_vector>(m_background));
}

View file

@ -99,7 +99,7 @@ struct dl_context {
void register_predicate(func_decl* pred, unsigned num_kinds, symbol const* kinds) {
if (m_collected_cmds) {
m_collected_cmds->m_rels.push_back(pred);
m_trail.push(push_back_vector<dl_context, func_decl_ref_vector>(m_collected_cmds->m_rels));
m_trail.push(push_back_vector<func_decl_ref_vector>(m_collected_cmds->m_rels));
}
dlctx().register_predicate(pred, false);
dlctx().set_predicate_representation(pred, num_kinds, kinds);
@ -111,8 +111,8 @@ struct dl_context {
expr_ref rl = m_context->bind_vars(rule, true);
m_collected_cmds->m_rules.push_back(rl);
m_collected_cmds->m_names.push_back(name);
m_trail.push(push_back_vector<dl_context, expr_ref_vector>(m_collected_cmds->m_rules));
m_trail.push(push_back_vector<dl_context, svector<symbol> >(m_collected_cmds->m_names));
m_trail.push(push_back_vector<expr_ref_vector>(m_collected_cmds->m_rules));
m_trail.push(push_back_vector<svector<symbol> >(m_collected_cmds->m_names));
}
else {
m_context->add_rule(rule, name, bound);
@ -130,7 +130,7 @@ struct dl_context {
qr = m.mk_app(q, args.size(), args.c_ptr());
qr = m_context->bind_vars(qr, false);
m_collected_cmds->m_queries.push_back(qr);
m_trail.push(push_back_vector<dl_context, expr_ref_vector>(m_collected_cmds->m_queries));
m_trail.push(push_back_vector<expr_ref_vector>(m_collected_cmds->m_queries));
return true;
}
else {