Beispiel #1
0
 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);
 }
Beispiel #2
0
 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);
 }
Beispiel #3
0
    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));
    }
Beispiel #4
0
 void sieve_relation::display(std::ostream & out) const {
     out << "Sieve relation ";
     print_container(m_inner_cols, out);
     out <<"\n";
     get_inner().display(out);
 }
Beispiel #5
0
 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);
 }
Beispiel #6
0
 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);
 }
Beispiel #7
0
 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);
 }
Beispiel #8
0
 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);
 }