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

remove template dependency for trail objects

This commit is contained in:
Nikolaj Bjorner 2021-03-19 11:14:20 -07:00
parent c05c5caab5
commit 15a7621e27
28 changed files with 46 additions and 58 deletions

View file

@ -409,8 +409,7 @@ public:
};
template<typename Ctx>
void undo_trail_stack(Ctx & ctx, ptr_vector<trail> & s, unsigned old_size) {
inline void undo_trail_stack(ptr_vector<trail> & s, unsigned old_size) {
SASSERT(old_size <= s.size());
typename ptr_vector<trail >::iterator begin = s.begin() + old_size;
typename ptr_vector<trail >::iterator it = s.end();
@ -421,14 +420,12 @@ void undo_trail_stack(Ctx & ctx, ptr_vector<trail> & s, unsigned old_size) {
s.shrink(old_size);
}
template<typename Ctx>
class trail_stack {
Ctx & m_ctx;
ptr_vector<trail> m_trail_stack;
unsigned_vector m_scopes;
region m_region;
public:
trail_stack(Ctx & c):m_ctx(c) {}
trail_stack() {}
~trail_stack() {}
@ -437,7 +434,7 @@ public:
void reset() {
pop_scope(m_scopes.size());
// Undo trail objects stored at lvl 0 (avoid memory leaks if lvl 0 contains new_obj_trail objects).
undo_trail_stack(m_ctx, m_trail_stack, 0);
undo_trail_stack(m_trail_stack, 0);
}
void push_ptr(trail * t) { m_trail_stack.push_back(t); }
@ -455,7 +452,7 @@ public:
SASSERT(num_scopes <= lvl);
unsigned new_lvl = lvl - num_scopes;
unsigned old_size = m_scopes[new_lvl];
undo_trail_stack(m_ctx, m_trail_stack, old_size);
undo_trail_stack(m_trail_stack, old_size);
m_scopes.shrink(new_lvl);
m_region.pop_scope(num_scopes);
}

View file

@ -23,8 +23,8 @@ Revision History:
class union_find_default_ctx {
public:
typedef trail_stack<union_find_default_ctx> _trail_stack;
union_find_default_ctx() : m_stack(*this) {}
typedef trail_stack _trail_stack;
union_find_default_ctx() : m_stack() {}
void unmerge_eh(unsigned, unsigned) {}
void merge_eh(unsigned, unsigned, unsigned, unsigned) {}
@ -39,7 +39,7 @@ private:
template<typename Ctx = union_find_default_ctx, typename StackCtx = Ctx>
class union_find {
Ctx & m_ctx;
trail_stack<StackCtx> & m_trail_stack;
trail_stack & m_trail_stack;
svector<unsigned> m_find;
svector<unsigned> m_size;
svector<unsigned> m_next;