3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-24 17:45:32 +00:00

slicing: mark

This commit is contained in:
Jakob Rath 2023-06-28 10:23:35 +02:00
parent 947335e147
commit 3a7cdc36d6
2 changed files with 18 additions and 0 deletions

View file

@ -64,6 +64,7 @@ namespace polysat {
m_slice2var.push_back(null_var);
m_proof_parent.push_back(null_slice);
m_proof_reason.push_back(null_dep);
m_mark.push_back(0);
m_trail.push_back(trail_item::alloc_slice);
return s;
}
@ -78,6 +79,7 @@ namespace polysat {
m_slice2var.pop_back();
m_proof_parent.pop_back();
m_proof_reason.pop_back();
m_mark.pop_back();
}
slicing::slice slicing::find_sub_hi(slice parent) const {

View file

@ -87,6 +87,22 @@ namespace polysat {
pvar_vector m_slice2var; // slice -> pvar, or null_var if slice is not equivalent to a variable
slice_vector m_var2slice; // pvar -> slice
unsigned_vector m_mark;
unsigned m_mark_timestamp = 0;
#if Z3DEBUG
bool m_mark_active = false;
#endif
void begin_mark() {
DEBUG_CODE({ SASSERT(!m_mark_active); m_mark_active = true; });
m_mark_timestamp++;
if (!m_mark_timestamp)
m_mark_timestamp++;
}
void end_mark() { DEBUG_CODE({ SASSERT(!m_mark_active); m_mark_active = false; }); }
bool is_marked(slice s) const { SASSERT(m_mark_active); return m_mark[s] == m_mark_timestamp; }
void mark(slice s) { SASSERT(m_mark_active); m_mark[s] = m_mark_timestamp; }
slice alloc_slice();
slice var2slice(pvar v) const { return find(m_var2slice[v]); }