mirror of
https://github.com/Z3Prover/z3
synced 2026-08-14 09:45:36 +00:00
guard_set: wrap rp_cache into guard_set_cache class (#10362)
Addresses code review feedback on PR #10361: the raw `obj_map` typedef + static `dealloc_cache` helper is replaced by a proper `guard_set_cache` class that owns its memory and adds a recycling optimization. ## Changes - **New `guard_set_cache` class** (`guard_set.h` / `.cpp`): - `m_cache` — `obj_map<expr, seq::range_predicate*>` (null value = unsupported guard, avoids retranslation) - `m_fresh` — pre-allocated `range_predicate*` recycled across failed translations; when `guard_to_range_predicate` rejects a guard, the heap object is retained in `m_fresh` instead of deallocated, so the next miss reuses it without an alloc/dealloc round-trip - Public API: `reset()`, `find(expr*, seq::range_predicate*&) → bool`, `fresh(unsigned max_char) → seq::range_predicate*`, `insert(expr*, seq::range_predicate*)` - **`guard_set`**: removed `rp_cache` typedef and `dealloc_cache` static; constructor parameter updated to `guard_set_cache*`; `conjoin` updated to use `fresh()` + `insert()` for the recycling path - **`seq_monadic`**: field type `guard_set::rp_cache` → `guard_set_cache`; reset call updated to `m_rp_cache.reset()` --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: Nikolaj Bjorner <nikolaj@cs.stanford.edu>
This commit is contained in:
parent
690c5a4c22
commit
ddfd403013
4 changed files with 62 additions and 28 deletions
|
|
@ -80,7 +80,7 @@ void seq_monadic::reset_cofactor_cache() {
|
|||
for (auto const& [k, v] : m_cofactor_cache)
|
||||
dealloc(v);
|
||||
m_cofactor_cache.reset();
|
||||
guard_set::dealloc_cache(m_rp_cache); // the guards live in the cofactor vectors
|
||||
m_rp_cache.reset(); // the guards live in the cofactor vectors
|
||||
}
|
||||
|
||||
bool seq_monadic::live_states(expr* R, expr_ref_vector& out) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue