box::box(std::vector<Enode *> const & vars) : m_vars(vars), m_values(m_vars.size() == 0 ? 1 : m_vars.size()), m_bounds(m_values.size()), m_domains(m_values.size()), m_precisions(m_values.size(), 0.0) { if (m_vars.size() > 0) { constructFromVariables(m_vars); } }
box::box(vector<Enode *> const & vars) : m_vars(nullptr), m_values(vars.size() == 0 ? 1 : vars.size()), m_idx_last_branched(-1) { if (vars.size() > 0) { m_vars = make_shared<vector<Enode *>>(vars); m_name_index_map = make_shared<unordered_map<string, int>>(); constructFromVariables(*m_vars); } }
void box::constructFromLiterals(vector<Enode *> const & lit_vec) { DREAL_LOG_DEBUG << "box::constructFromLiterals"; // Construct a list of variables set<Enode *, enode_lex_cmp> var_set; for (auto const & lit : lit_vec) { unordered_set<Enode *> const & temp_vars = lit->get_exist_vars(); var_set.insert(temp_vars.begin(), temp_vars.end()); } m_vars = make_shared<vector<Enode*>>(var_set.begin(), var_set.end()); m_name_index_map = make_shared<unordered_map<string, int>>(); constructFromVariables(*m_vars); return; }
box::box(box const & b, unordered_set<Enode *> const & extra_vars) : m_vars(make_shared<vector<Enode* > >(*b.m_vars)), m_values(m_vars->size() + extra_vars.size()), m_name_index_map(make_shared<unordered_map<string, int>>()), m_idx_last_branched(-1) { m_vars->insert(m_vars->end(), extra_vars.begin(), extra_vars.end()); if (m_vars->size() > 0) { sort(m_vars->begin(), m_vars->end(), enode_lex_cmp()); constructFromVariables(*m_vars); for (unsigned i = 0; i < b.m_vars->size(); i++) { m_values[get_index((*b.m_vars)[i])] = b.m_values[i]; } } }
box::box(box const & b, std::unordered_set<Enode *> const & extra_vars) : m_vars(b.m_vars), m_values(m_vars.size() + extra_vars.size()), m_bounds(m_values.size()), m_domains(m_values.size()), m_precisions(m_values.size(), 0.0) { copy(extra_vars.begin(), extra_vars.end(), back_inserter(m_vars)); std::sort(m_vars.begin(), m_vars.end(), [](Enode const * e1, Enode const * e2) { return e1->getCar()->getName() < e2->getCar()->getName(); }); if (m_vars.size() > 0) { constructFromVariables(m_vars); for (unsigned i = 0; i < b.m_vars.size(); i++) { m_values[get_index(b.m_vars[i])] = b.m_values[i]; } } }
void box::constructFromLiterals(vector<Enode *> const & lit_vec) { DREAL_LOG_DEBUG << "box::constructFromLiterals"; // Construct a list of variables unordered_set<Enode *> var_set; for (auto const & lit : lit_vec) { unordered_set<Enode *> const & temp_vars = lit->get_vars(); var_set.insert(temp_vars.begin(), temp_vars.end()); } m_vars.clear(); std::copy(var_set.begin(), var_set.end(), std::back_inserter(m_vars)); std::sort(m_vars.begin(), m_vars.end(), [](Enode const * e1, Enode const * e2) { return e1->getCar()->getName() < e2->getCar()->getName(); }); constructFromVariables(m_vars); return; }