Example #1
0
        virtual void operator()(relation_base & r, const relation_base & neg) {
            bool r_sieved = r.get_plugin().is_sieve_relation();
            bool neg_sieved = neg.get_plugin().is_sieve_relation();
            SASSERT(r_sieved || neg_sieved);
            sieve_relation * sr = r_sieved ? static_cast<sieve_relation *>(&r) : 0;
            const sieve_relation * sneg = neg_sieved ? static_cast<const sieve_relation *>(&neg) : 0;
            relation_base & inner_r = r_sieved ? sr->get_inner() : r;
            const relation_base & inner_neg = neg_sieved ? sneg->get_inner() : neg;

            (*m_inner_fun)(inner_r, inner_neg);
        }
Example #2
0
        virtual void operator()(relation_base & tgt, const relation_base & src, relation_base * delta) {
            bool tgt_sieved = tgt.get_plugin().is_sieve_relation();
            bool src_sieved = src.get_plugin().is_sieve_relation();
            bool delta_sieved = delta && delta->get_plugin().is_sieve_relation();
            sieve_relation * stgt = tgt_sieved ? static_cast<sieve_relation *>(&tgt) : 0;
            const sieve_relation * ssrc = src_sieved ? static_cast<const sieve_relation *>(&src) : 0;
            sieve_relation * sdelta = delta_sieved ? static_cast<sieve_relation *>(delta) : 0;
            relation_base & itgt = tgt_sieved ? stgt->get_inner() : tgt;
            const relation_base & isrc = src_sieved ? ssrc->get_inner() : src;
            relation_base * idelta = delta_sieved ? &sdelta->get_inner() : delta;

            (*m_union_fun)(itgt, isrc, idelta);
        }
Example #3
0
 join_fn(sieve_relation_plugin & p, const relation_base & r1, const relation_base & r2, unsigned col_cnt, 
             const unsigned * cols1, const unsigned * cols2, relation_join_fn * inner_join_fun)
         : convenient_relation_join_fn(r1.get_signature(), r2.get_signature(), col_cnt, cols1, cols2),
         m_plugin(p),
         m_inner_join_fun(inner_join_fun) {
     bool r1_sieved = r1.get_plugin().is_sieve_relation();
     bool r2_sieved = r2.get_plugin().is_sieve_relation();
     const sieve_relation * sr1 = r1_sieved ? static_cast<const sieve_relation *>(&r1) : 0;
     const sieve_relation * sr2 = r2_sieved ? static_cast<const sieve_relation *>(&r2) : 0;
     if(r1_sieved) {
         m_result_inner_cols.append(sr1->m_inner_cols);
     }
     else {
         m_result_inner_cols.resize(r1.get_signature().size(), true);
     }
     if(r2_sieved) {
         m_result_inner_cols.append(sr2->m_inner_cols);
     }
     else {
         m_result_inner_cols.resize(m_result_inner_cols.size() + r2.get_signature().size(), true);
     }
 }
Example #4
0
 bool product_relation_plugin::is_product_relation(relation_base const& r) {
     return r.get_plugin().get_name() == product_relation_plugin::get_name();
 }
        void operator()(relation_base & _r, const relation_base & _src, relation_base * _delta) override {

            TRACE("interval_relation", _r.display(tout << "dst:\n"); _src.display(tout  << "src:\n"););
Example #6
0
 bool bound_relation_plugin::is_interval_relation(relation_base const& r) {       
     return symbol("interval_relation") == r.get_plugin().get_name();
 }
Example #7
0
        virtual void operator()(relation_base & r0) {
            SASSERT(r0.get_plugin().is_sieve_relation());
            sieve_relation & r = static_cast<sieve_relation &>(r0);

            (*m_inner_fun)(r.get_inner());
        }