3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-10-08 17:01:55 +00:00

Merge branch 'opt' of https://git01.codeplex.com/z3 into opt

This commit is contained in:
Nikolaj Bjorner 2014-08-29 08:36:52 -07:00
commit d141719d68
5 changed files with 199 additions and 44 deletions

View file

@ -122,10 +122,9 @@ namespace datalog {
UNREACHABLE();
return t;
}
};
typedef ptr_hashtable<product_set, product_set::hash, product_set::eq> product_sets;
class product_set_relation : public relation_base {
@ -215,6 +214,72 @@ namespace datalog {
ptr_vector<relation_mutator_fn>& mutators);
};
class product_set_factory;
class product_set2 {
friend class product_set_factory;
unsigned char m_data[0];
public:
enum initial_t {
EMPTY_t,
FULL_t
};
product_set2(product_set_factory& fac, initial_t init);
~product_set2();
unsigned get_hash(product_set_factory& fac) const;
bool equals(product_set_factory& fac, product_set2 const& other) const;
void add_fact(product_set_factory& fac, const relation_fact & f);
bool contains_fact(product_set_factory& fac, const relation_fact & f) const;
relation_base * clone(product_set_factory& fac) const;
void reset(product_set_factory& fac);
void mk_join(product_set_factory& fac, product_set2 const& r1, product_set2 const& r2,
unsigned num_cols, unsigned const* cols1, unsigned const* cols2);
void mk_project(product_set_factory& fac,
product_set2 const& r, unsigned col_cnt, unsigned const* removed_cols);
void mk_rename(product_set_factory& fac,
product_set2 const& r, unsigned col_cnt, unsigned const* cycle);
void mk_union(product_set_factory& fac,
product_set2 const& src, product_set2* delta, bool is_widen);
unsigned find(product_set_factory& fac, unsigned i);
void merge(product_set_factory& fac, unsigned i, unsigned j);
void display(product_set_factory& fac, std::ostream& out) const;
};
class product_set_factory {
friend class product_set_factory;
unsigned char m_data[0];
public:
enum initial_t {
EMPTY_t,
FULL_t
};
product_set_factory(product_set_plugin& p, relation_signature const& sig);
~product_set_factory();
product_set2* create();
void retire(product_set2*);
unsigned get_hash(product_set2& ps) const;
bool equals(product_set2 const& p1, product_set2 const& p2);
void add_fact(product_set2& p, const relation_fact & f);
bool contains_fact(product_set2& p, const relation_fact & f) const;
relation_base * clone(product_set2& p) const;
void reset(product_set2& p);
void mk_join(product_set2& p, product_set2 const& r1, product_set2 const& r2,
unsigned num_cols, unsigned const* cols1, unsigned const* cols2);
void mk_project(product_set2& p,
product_set2 const& r, unsigned col_cnt, unsigned const* removed_cols);
void mk_rename(product_set2& p,
product_set2 const& r, unsigned col_cnt, unsigned const* cycle);
void mk_union(product_set2& p,
product_set2 const& src, product_set2* delta, bool is_widen);
unsigned find(product_set2& p, unsigned i);
void merge(product_set2& p, unsigned i, unsigned j);
void display(product_set2& p, std::ostream& out) const;
};
};
#endif