mirror of
https://github.com/Z3Prover/z3
synced 2025-04-25 10:05:32 +00:00
slicing: mark
This commit is contained in:
parent
947335e147
commit
3a7cdc36d6
2 changed files with 18 additions and 0 deletions
|
@ -64,6 +64,7 @@ namespace polysat {
|
||||||
m_slice2var.push_back(null_var);
|
m_slice2var.push_back(null_var);
|
||||||
m_proof_parent.push_back(null_slice);
|
m_proof_parent.push_back(null_slice);
|
||||||
m_proof_reason.push_back(null_dep);
|
m_proof_reason.push_back(null_dep);
|
||||||
|
m_mark.push_back(0);
|
||||||
m_trail.push_back(trail_item::alloc_slice);
|
m_trail.push_back(trail_item::alloc_slice);
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
@ -78,6 +79,7 @@ namespace polysat {
|
||||||
m_slice2var.pop_back();
|
m_slice2var.pop_back();
|
||||||
m_proof_parent.pop_back();
|
m_proof_parent.pop_back();
|
||||||
m_proof_reason.pop_back();
|
m_proof_reason.pop_back();
|
||||||
|
m_mark.pop_back();
|
||||||
}
|
}
|
||||||
|
|
||||||
slicing::slice slicing::find_sub_hi(slice parent) const {
|
slicing::slice slicing::find_sub_hi(slice parent) const {
|
||||||
|
|
|
@ -87,6 +87,22 @@ namespace polysat {
|
||||||
pvar_vector m_slice2var; // slice -> pvar, or null_var if slice is not equivalent to a variable
|
pvar_vector m_slice2var; // slice -> pvar, or null_var if slice is not equivalent to a variable
|
||||||
slice_vector m_var2slice; // pvar -> slice
|
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 alloc_slice();
|
||||||
|
|
||||||
slice var2slice(pvar v) const { return find(m_var2slice[v]); }
|
slice var2slice(pvar v) const { return find(m_var2slice[v]); }
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue