void sieve_relation::to_formula(expr_ref& fml) const { ast_manager& m = fml.get_manager(); expr_ref_vector s(m); expr_ref tmp(m); relation_signature const& sig = get_inner().get_signature(); unsigned sz = sig.size(); for (unsigned i = sz ; i > 0; ) { --i; unsigned idx = m_inner2sig[i]; s.push_back(m.mk_var(idx, sig[i])); } get_inner().to_formula(tmp); get_plugin().get_context().get_var_subst()(tmp, sz, s.c_ptr(), fml); }
bool Button::handle_events(SDL_Event* event) { i_settings &= ~BUTTON_CLICKED; PRINT((i_settings & BUTTON_ENABLED)); if (i_settings & BUTTON_ENABLED) { if (event->type == SDL_MOUSEBUTTONUP) { if (event->button.button == SDL_BUTTON_LEFT) { if (in_range(event->button.x, event->button.y, *get_inner())) { i_settings |= BUTTON_CLICKED; if (click_sound) Mix_PlayChannel(-1, click_sound, 0); } } } } return ( (i_settings & BUTTON_CLICKED) == BUTTON_CLICKED); }
sieve_relation::sieve_relation(sieve_relation_plugin & p, const relation_signature & s, const bool * inner_columns, relation_base * inner) : relation_base(p, s), m_inner_cols(s.size(), inner_columns), m_inner(inner) { unsigned n = s.size(); for(unsigned i=0; i<n; i++) { if(inner_columns && inner_columns[i]) { unsigned inner_idx = m_inner2sig.size(); SASSERT(get_inner().get_signature()[inner_idx]==s[i]); m_sig2inner.push_back(inner_idx); m_inner2sig.push_back(i); } else { m_sig2inner.push_back(UINT_MAX); m_ignored_cols.push_back(i); } } set_kind(p.get_relation_kind(*this, inner_columns)); }
void sieve_relation::display(std::ostream & out) const { out << "Sieve relation "; print_container(m_inner_cols, out); out <<"\n"; get_inner().display(out); }
relation_base * sieve_relation::complement(func_decl* p) const { //this is not precisely a complement, because we still treat the ignored collumns as //full, but it should give reasonable results inside the product relation relation_base * new_inner = get_inner().complement(p); return get_plugin().mk_from_inner(get_signature(), m_inner_cols.c_ptr(), new_inner); }
sieve_relation * sieve_relation::clone() const { relation_base * new_inner = get_inner().clone(); return get_plugin().mk_from_inner(get_signature(), m_inner_cols.c_ptr(), new_inner); }
bool sieve_relation::contains_fact(const relation_fact & f) const { relation_fact inner_f = f; project_out_vector_columns(inner_f, m_ignored_cols); return get_inner().contains_fact(inner_f); }
void sieve_relation::add_fact(const relation_fact & f) { relation_fact inner_f = f; project_out_vector_columns(inner_f, m_ignored_cols); get_inner().add_fact(inner_f); }