mirror of
https://github.com/Z3Prover/z3
synced 2025-07-19 10:52:02 +00:00
cleaner iterator
Signed-off-by: Lev <levnach@hotmail.com>
This commit is contained in:
parent
bd1be96e0f
commit
d223f47526
1 changed files with 29 additions and 37 deletions
|
@ -51,20 +51,21 @@ struct solver::imp {
|
||||||
|
|
||||||
struct const_iterator_equiv_mon {
|
struct const_iterator_equiv_mon {
|
||||||
// fields
|
// fields
|
||||||
const unsigned_vector m_vars;
|
vector<const unsigned_vector*> m_same_abs_vals;
|
||||||
vector<unsigned_vector::const_iterator> m_offsets;
|
vector<unsigned_vector::const_iterator> m_its;
|
||||||
const imp& m_imp;
|
|
||||||
bool m_done;
|
bool m_done;
|
||||||
|
const imp * m_imp;
|
||||||
// constructor for begin()
|
// constructor for begin()
|
||||||
const_iterator_equiv_mon(const unsigned_vector& vars,
|
const_iterator_equiv_mon(vector<const unsigned_vector*> abs_vals, const imp* i)
|
||||||
vector<unsigned_vector::const_iterator> offsets,
|
: m_same_abs_vals(abs_vals),
|
||||||
const imp& i) : m_vars(vars),
|
m_done(false),
|
||||||
m_offsets(offsets),
|
m_imp(i) {
|
||||||
m_imp(i),
|
for (auto it: abs_vals){
|
||||||
m_done(false) {}
|
m_its.push_back(it->begin());
|
||||||
|
}
|
||||||
|
}
|
||||||
// constructor for end()
|
// constructor for end()
|
||||||
const_iterator_equiv_mon( const imp& i) :m_imp(i),
|
const_iterator_equiv_mon() : m_done(true) {}
|
||||||
m_done(true) {}
|
|
||||||
|
|
||||||
//typedefs
|
//typedefs
|
||||||
typedef const_iterator_equiv_mon self_type;
|
typedef const_iterator_equiv_mon self_type;
|
||||||
|
@ -77,10 +78,10 @@ struct solver::imp {
|
||||||
if (m_done)
|
if (m_done)
|
||||||
return;
|
return;
|
||||||
unsigned k = 0;
|
unsigned k = 0;
|
||||||
for (; k < m_offsets.size(); k++) {
|
for (; k < m_its.size(); k++) {
|
||||||
auto & it = m_offsets[k];
|
auto & it = m_its[k];
|
||||||
it++;
|
it++;
|
||||||
const auto & evars = m_imp.abs_eq_vars(m_vars[k]);
|
const auto & evars = *(m_same_abs_vals[k]);
|
||||||
if (it == evars.end()) {
|
if (it == evars.end()) {
|
||||||
it = evars.begin();
|
it = evars.begin();
|
||||||
} else {
|
} else {
|
||||||
|
@ -88,24 +89,23 @@ struct solver::imp {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (k == m_vars.size()) {
|
if (k == m_its.size()) {
|
||||||
m_done = true;
|
m_done = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned_vector get_key() const {
|
unsigned_vector get_key() const {
|
||||||
unsigned_vector r;
|
unsigned_vector r;
|
||||||
for(const auto& it : m_offsets){
|
for(const auto& it : m_its){
|
||||||
r.push_back(*it);
|
r.push_back(*it);
|
||||||
}
|
}
|
||||||
std::sort(r.begin(), r.end());
|
std::sort(r.begin(), r.end());
|
||||||
TRACE("nla_solver", tout << "r = "; m_imp.print_product_with_vars(r, tout););
|
TRACE("nla_solver", tout << "r = "; m_imp->print_product_with_vars(r, tout););
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned get_monomial() const {
|
unsigned get_monomial() const {
|
||||||
unsigned_vector key = get_key();
|
return m_imp->find_monomial(get_key());
|
||||||
return m_imp.find_monomial(key);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
self_type operator++() {self_type i = *this; operator++(1); return i;}
|
self_type operator++() {self_type i = *this; operator++(1); return i;}
|
||||||
|
@ -117,7 +117,7 @@ struct solver::imp {
|
||||||
unsigned i = get_monomial();
|
unsigned i = get_monomial();
|
||||||
TRACE("nla_solver",
|
TRACE("nla_solver",
|
||||||
if (static_cast<int>(i) != -1)
|
if (static_cast<int>(i) != -1)
|
||||||
m_imp.print_monomial_with_vars(m_imp.m_monomials[i], tout);
|
m_imp->print_monomial_with_vars(m_imp->m_monomials[i], tout);
|
||||||
else
|
else
|
||||||
tout << "not found";);
|
tout << "not found";);
|
||||||
return i;
|
return i;
|
||||||
|
@ -129,26 +129,18 @@ struct solver::imp {
|
||||||
const imp& m_imp;
|
const imp& m_imp;
|
||||||
equiv_monomials(const monomial & m, const imp& i) : m_mon(m), m_imp(i) {}
|
equiv_monomials(const monomial & m, const imp& i) : m_mon(m), m_imp(i) {}
|
||||||
|
|
||||||
const_iterator_equiv_mon begin() {
|
vector<const unsigned_vector*> vars_eqs() const {
|
||||||
return const_iterator_equiv_mon(m_mon.vars(), vars_eq_offsets_begin(), m_imp);
|
vector<const unsigned_vector*> r;
|
||||||
}
|
|
||||||
|
|
||||||
const_iterator_equiv_mon end() {
|
|
||||||
return const_iterator_equiv_mon(m_imp);
|
|
||||||
}
|
|
||||||
vector<unsigned_vector::const_iterator> vars_eq_offsets_end() const {
|
|
||||||
vector<unsigned_vector::const_iterator> r;
|
|
||||||
for(lpvar j : m_mon.vars()) {
|
for(lpvar j : m_mon.vars()) {
|
||||||
r.push_back(m_imp.abs_eq_vars(j).end());
|
r.push_back(&m_imp.abs_eq_vars(j));
|
||||||
}
|
}
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
vector<unsigned_vector::const_iterator> vars_eq_offsets_begin() const {
|
const_iterator_equiv_mon begin() const {
|
||||||
vector<unsigned_vector::const_iterator> r;
|
return const_iterator_equiv_mon(vars_eqs(), &m_imp);
|
||||||
for(lpvar j : m_mon.vars()) {
|
}
|
||||||
r.push_back(m_imp.abs_eq_vars(j).begin());
|
const_iterator_equiv_mon end() const {
|
||||||
}
|
return const_iterator_equiv_mon();
|
||||||
return r;
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue