mirror of
https://github.com/Z3Prover/z3
synced 2025-09-02 00:00:41 +00:00
merge useful utilities from qsat
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
f951372f03
commit
f175f864ec
32 changed files with 323 additions and 38 deletions
|
@ -39,6 +39,17 @@ namespace nlsat {
|
|||
m_values.swap(other.m_values);
|
||||
m_assigned.swap(other.m_assigned);
|
||||
}
|
||||
void copy(assignment const& other) {
|
||||
m_assigned.reset();
|
||||
m_assigned.append(other.m_assigned);
|
||||
m_values.reserve(m_assigned.size(), anum());
|
||||
for (unsigned i = 0; i < m_assigned.size(); ++i) {
|
||||
if (is_assigned(i)) {
|
||||
am().set(m_values[i], other.value(i));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void set_core(var x, anum & v) {
|
||||
m_values.reserve(x+1, anum());
|
||||
m_assigned.reserve(x+1, false);
|
||||
|
@ -52,11 +63,26 @@ namespace nlsat {
|
|||
am().set(m_values[x], v);
|
||||
}
|
||||
void reset(var x) { if (x < m_assigned.size()) m_assigned[x] = false; }
|
||||
void reset() { m_assigned.reset(); }
|
||||
bool is_assigned(var x) const { return m_assigned.get(x, false); }
|
||||
anum const & value(var x) const { return m_values[x]; }
|
||||
virtual anum_manager & m() const { return am(); }
|
||||
virtual bool contains(var x) const { return is_assigned(x); }
|
||||
virtual anum const & operator()(var x) const { SASSERT(is_assigned(x)); return value(x); }
|
||||
void swap(var x, var y) {
|
||||
SASSERT(x < m_values.size() && y < m_values.size());
|
||||
std::swap(m_assigned[x], m_assigned[y]);
|
||||
std::swap(m_values[x], m_values[y]);
|
||||
}
|
||||
void display(std::ostream& out) const {
|
||||
for (unsigned i = 0; i < m_assigned.size(); ++i) {
|
||||
if (m_assigned[i]) {
|
||||
out << "x" << i << " := ";
|
||||
m_values.m().display(out, m_values[i]);
|
||||
out << "\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue