3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-23 17:15: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

@ -23,16 +23,16 @@ Revision History:
#include "util/obj_ref.h"
#include "util/vector.h"
template<typename Ctx>
class trail {
public:
virtual ~trail() {
}
virtual void undo(Ctx & ctx) = 0;
virtual void undo() = 0;
};
template<typename Ctx, typename T>
class value_trail : public trail<Ctx> {
template<typename T>
class value_trail : public trail {
T & m_value;
T m_old_value;
@ -51,15 +51,15 @@ public:
~value_trail() override {
}
void undo(Ctx & ctx) override {
void undo() override {
m_value = m_old_value;
}
};
template<typename Ctx, typename T, typename Ts>
class scoped_value_trail : public trail<Ctx> {
template<typename T, typename Ts>
class scoped_value_trail : public trail {
T & m_value;
Ts & m_values;
@ -72,15 +72,14 @@ public:
~scoped_value_trail() override {
}
void undo(Ctx & ctx) override {
void undo() override {
m_value = m_values.back();
m_values.pop_back();
}
};
template<typename Ctx>
class reset_flag_trail : public trail<Ctx> {
class reset_flag_trail : public trail {
bool & m_value;
public:
reset_flag_trail(bool & value):
@ -90,13 +89,13 @@ public:
~reset_flag_trail() override {
}
void undo(Ctx & ctx) override {
void undo() override {
m_value = false;
}
};
template<typename Ctx, typename T>
class set_ptr_trail : public trail<Ctx> {
template<typename T>
class set_ptr_trail : public trail {
T * & m_ptr;
public:
set_ptr_trail(T * & ptr):
@ -104,13 +103,13 @@ public:
SASSERT(m_ptr == 0);
}
void undo(Ctx & ctx) override {
void undo() override {
m_ptr = nullptr;
}
};
template<typename Ctx, typename T, bool CallDestructors=true>
class restore_size_trail : public trail<Ctx> {
template<typename T, bool CallDestructors=true>
class restore_size_trail : public trail {
vector<T, CallDestructors> & m_vector;
unsigned m_old_size;
public:
@ -124,13 +123,13 @@ public:
}
~restore_size_trail() override {
}
void undo(Ctx & ctx) override {
void undo() override {
m_vector.shrink(m_old_size);
}
};
template<typename Ctx, typename T, bool CallDestructors=true>
class vector_value_trail : public trail<Ctx> {
template<typename T, bool CallDestructors=true>
class vector_value_trail : public trail {
vector<T, CallDestructors> & m_vector;
unsigned m_idx;
T m_old_value;
@ -144,13 +143,13 @@ public:
~vector_value_trail() override {
}
void undo(Ctx & ctx) override {
void undo() override {
m_vector[m_idx] = m_old_value;
}
};
template<typename Ctx, typename V, typename T>
class vector2_value_trail : public trail<Ctx> {
template<typename V, typename T>
class vector2_value_trail : public trail {
V & m_vector;
unsigned m_i;
unsigned m_j;
@ -166,57 +165,57 @@ public:
~vector2_value_trail() override {
}
void undo(Ctx & ctx) override {
void undo() override {
m_vector[m_i][m_j] = m_old_value;
}
};
template<typename Ctx, typename D, typename R>
class insert_obj_map : public trail<Ctx> {
template<typename D, typename R>
class insert_obj_map : public trail {
obj_map<D,R>& m_map;
D* m_obj;
public:
insert_obj_map(obj_map<D,R>& t, D* o) : m_map(t), m_obj(o) {}
~insert_obj_map() override {}
void undo(Ctx & ctx) override { m_map.remove(m_obj); }
void undo() override { m_map.remove(m_obj); }
};
template<typename Ctx, typename D, typename R>
class remove_obj_map : public trail<Ctx> {
template<typename D, typename R>
class remove_obj_map : public trail {
obj_map<D,R>& m_map;
D* m_obj;
R m_value;
public:
remove_obj_map(obj_map<D,R>& t, D* o, R v) : m_map(t), m_obj(o), m_value(v) {}
~remove_obj_map() override {}
void undo(Ctx & ctx) override { m_map.insert(m_obj, m_value); }
void undo() override { m_map.insert(m_obj, m_value); }
};
template<typename Ctx, typename M, typename D>
class insert_map : public trail<Ctx> {
template<typename M, typename D>
class insert_map : public trail {
M& m_map;
D m_obj;
public:
insert_map(M& t, D o) : m_map(t), m_obj(o) {}
~insert_map() override {}
void undo(Ctx & ctx) override { m_map.remove(m_obj); }
void undo() override { m_map.remove(m_obj); }
};
template<typename Ctx, typename M, typename Mgr, typename D>
class insert_ref_map : public trail<Ctx> {
template<typename M, typename Mgr, typename D>
class insert_ref_map : public trail {
Mgr& m;
M& m_map;
D m_obj;
public:
insert_ref_map(Mgr& m, M& t, D o) : m(m), m_map(t), m_obj(o) {}
virtual ~insert_ref_map() {}
virtual void undo(Ctx & ctx) { m_map.remove(m_obj); m.dec_ref(m_obj); }
virtual void undo() { m_map.remove(m_obj); m.dec_ref(m_obj); }
};
template<typename Ctx, typename Mgr, typename D, typename R>
class insert_ref2_map : public trail<Ctx> {
template<typename Mgr, typename D, typename R>
class insert_ref2_map : public trail {
Mgr& m;
obj_map<D,R*>& m_map;
D* m_obj;
@ -224,25 +223,25 @@ class insert_ref2_map : public trail<Ctx> {
public:
insert_ref2_map(Mgr& m, obj_map<D,R*>& t, D*o, R*r) : m(m), m_map(t), m_obj(o), m_val(r) {}
virtual ~insert_ref2_map() {}
virtual void undo(Ctx & ctx) { m_map.remove(m_obj); m.dec_ref(m_obj); m.dec_ref(m_val); }
virtual void undo() { m_map.remove(m_obj); m.dec_ref(m_obj); m.dec_ref(m_val); }
};
template<typename Ctx, typename V>
class push_back_vector : public trail<Ctx> {
template<typename V>
class push_back_vector : public trail {
V & m_vector;
public:
push_back_vector(V & v):
m_vector(v) {
}
void undo(Ctx & ctx) override {
void undo() override {
m_vector.pop_back();
}
};
template<typename Ctx, typename T>
class set_vector_idx_trail : public trail<Ctx> {
template<typename T>
class set_vector_idx_trail : public trail {
ptr_vector<T> & m_vector;
unsigned m_idx;
public:
@ -254,13 +253,13 @@ public:
~set_vector_idx_trail() override {
}
void undo(Ctx & ctx) override {
void undo() override {
m_vector[m_idx] = 0;
}
};
template<typename Ctx, typename T, bool CallDestructors=true>
class pop_back_trail : public trail<Ctx> {
template<typename T, bool CallDestructors=true>
class pop_back_trail : public trail {
vector<T, CallDestructors> & m_vector;
T m_value;
public:
@ -269,13 +268,13 @@ public:
m_value(m_vector.back()) {
}
virtual void undo(Ctx & ctx) {
virtual void undo() {
m_vector.push_back(m_value);
}
};
template<typename Ctx, typename T, bool CallDestructors=true>
class pop_back2_trail : public trail<Ctx> {
template<typename T, bool CallDestructors=true>
class pop_back2_trail : public trail {
vector<T, CallDestructors> & m_vector;
typedef vector<vector<T, CallDestructors>, true> vector_t;
unsigned m_index;
@ -287,28 +286,28 @@ public:
m_value(m_vector[index].back()) {
}
virtual void undo(Ctx & ctx) {
virtual void undo() {
m_vector[m_index].push_back(m_value);
}
};
template<typename Ctx, typename T, bool CallDestructors=true>
class push_back_trail : public trail<Ctx> {
template<typename T, bool CallDestructors=true>
class push_back_trail : public trail {
vector<T, CallDestructors> & m_vector;
public:
push_back_trail(vector<T, CallDestructors> & v):
m_vector(v) {
}
void undo(Ctx & ctx) override {
void undo() override {
m_vector.pop_back();
}
};
template<typename Ctx, typename T, bool CallDestructors=true>
class push_back2_trail : public trail<Ctx> {
template<typename T, bool CallDestructors=true>
class push_back2_trail : public trail {
typedef vector<vector<T, CallDestructors>, true> vector_t;
vector_t & m_vector;
unsigned m_index;
@ -318,13 +317,13 @@ public:
m_index(index) {
}
virtual void undo(Ctx & ctx) {
virtual void undo() {
m_vector[m_index].pop_back();
}
};
template<typename Ctx>
class set_bitvector_trail : public trail<Ctx> {
class set_bitvector_trail : public trail {
bool_vector & m_vector;
unsigned m_idx;
public:
@ -335,14 +334,14 @@ public:
m_vector[m_idx] = true;
}
void undo(Ctx & ctx) override {
void undo() override {
m_vector[m_idx] = false;
}
};
template<typename Ctx, typename T, bool CallDestructors = true>
class history_trail : public trail<Ctx> {
template<typename T, bool CallDestructors = true>
class history_trail : public trail {
vector<T, CallDestructors>& m_dst;
unsigned m_idx;
vector<T, CallDestructors>& m_hist;
@ -355,69 +354,69 @@ public:
~history_trail() override {
}
void undo(Ctx& ctx) override {
void undo() override {
m_dst[m_idx] = m_hist.back();
m_hist.pop_back();
}
};
template<typename Ctx, typename T>
class new_obj_trail : public trail<Ctx> {
template<typename T>
class new_obj_trail : public trail {
T * m_obj;
public:
new_obj_trail(T * obj):
m_obj(obj) {
}
void undo(Ctx & ctx) override {
void undo() override {
dealloc(m_obj);
}
};
template<typename Ctx, typename M, typename T>
class obj_ref_trail : public trail<Ctx> {
template<typename M, typename T>
class obj_ref_trail : public trail {
obj_ref<T,M> m_obj;
public:
obj_ref_trail(obj_ref<T,M>& obj):
m_obj(obj) {
}
virtual void undo(Ctx & ctx) {
virtual void undo() {
m_obj.reset();
}
};
template<typename Ctx, typename T>
class insert_obj_trail : public trail<Ctx> {
template<typename T>
class insert_obj_trail : public trail {
obj_hashtable<T>& m_table;
T* m_obj;
public:
insert_obj_trail(obj_hashtable<T>& t, T* o) : m_table(t), m_obj(o) {}
~insert_obj_trail() override {}
void undo(Ctx & ctx) override { m_table.remove(m_obj); }
void undo() override { m_table.remove(m_obj); }
};
template<typename Ctx, typename T>
class remove_obj_trail : public trail<Ctx> {
template<typename T>
class remove_obj_trail : public trail {
obj_hashtable<T>& m_table;
T* m_obj;
public:
remove_obj_trail(obj_hashtable<T>& t, T* o) : m_table(t), m_obj(o) {}
virtual ~remove_obj_trail() {}
virtual void undo(Ctx & ctx) { m_table.insert(m_obj); }
virtual void undo() { m_table.insert(m_obj); }
};
template<typename Ctx>
void undo_trail_stack(Ctx & ctx, ptr_vector<trail<Ctx> > & s, unsigned old_size) {
void undo_trail_stack(Ctx & ctx, ptr_vector<trail> & s, unsigned old_size) {
SASSERT(old_size <= s.size());
typename ptr_vector<trail<Ctx> >::iterator begin = s.begin() + old_size;
typename ptr_vector<trail<Ctx> >::iterator it = s.end();
typename ptr_vector<trail >::iterator begin = s.begin() + old_size;
typename ptr_vector<trail >::iterator it = s.end();
while (it != begin) {
--it;
(*it)->undo(ctx);
(*it)->undo();
}
s.shrink(old_size);
}
@ -425,7 +424,7 @@ void undo_trail_stack(Ctx & ctx, ptr_vector<trail<Ctx> > & s, unsigned old_size)
template<typename Ctx>
class trail_stack {
Ctx & m_ctx;
ptr_vector<trail<Ctx> > m_trail_stack;
ptr_vector<trail> m_trail_stack;
unsigned_vector m_scopes;
region m_region;
public:
@ -441,7 +440,7 @@ public:
undo_trail_stack(m_ctx, m_trail_stack, 0);
}
void push_ptr(trail<Ctx> * t) { m_trail_stack.push_back(t); }
void push_ptr(trail * t) { m_trail_stack.push_back(t); }
template<typename TrailObject>
void push(TrailObject const & obj) { m_trail_stack.push_back(new (m_region) TrailObject(obj)); }

View file

@ -47,12 +47,12 @@ class union_find {
class mk_var_trail;
friend class mk_var_trail;
class mk_var_trail : public trail<StackCtx> {
class mk_var_trail : public trail {
union_find & m_owner;
public:
mk_var_trail(union_find & o):m_owner(o) {}
~mk_var_trail() override {}
void undo(StackCtx& ctx) override {
void undo() override {
m_owner.m_find.pop_back();
m_owner.m_size.pop_back();
m_owner.m_next.pop_back();
@ -64,13 +64,13 @@ class union_find {
class merge_trail;
friend class merge_trail;
class merge_trail : public trail<StackCtx> {
class merge_trail : public trail {
union_find & m_owner;
unsigned m_r1;
public:
merge_trail(union_find & o, unsigned r1):m_owner(o), m_r1(r1) {}
~merge_trail() override {}
void undo(StackCtx& ctx) override { m_owner.unmerge(m_r1); }
void undo() override { m_owner.unmerge(m_r1); }
};
void unmerge(unsigned r1) {