#ifndef HORUS_PARFACTORLIST_H #define HORUS_PARFACTORLIST_H #include #include #include "Parfactor.h" #include "ProbFormula.h" using namespace std; class ParfactorList { public: ParfactorList (void) { } ParfactorList (const ParfactorList&); ParfactorList (const Parfactors&); ~ParfactorList (void); const list& parfactors (void) const { return pfList_; } void clear (void) { pfList_.clear(); } unsigned size (void) const { return pfList_.size(); } typedef std::list::iterator iterator; iterator begin (void) { return pfList_.begin(); } iterator end (void) { return pfList_.end(); } typedef std::list::const_iterator const_iterator; const_iterator begin (void) const { return pfList_.begin(); } const_iterator end (void) const { return pfList_.end(); } void add (Parfactor* pf); void add (const Parfactors& pfs); void addShattered (Parfactor* pf); list::iterator insertShattered ( list::iterator, Parfactor*); list::iterator remove (list::iterator); list::iterator removeAndDelete (list::iterator); bool isAllShattered (void) const; void print (void) const; private: bool isShattered (const Parfactor*, const Parfactor*) const; void addToShatteredList (Parfactor*); std::pair shatter ( Parfactor*, Parfactor*); std::pair shatter ( unsigned, Parfactor*, unsigned, Parfactor*); Parfactors shatter ( Parfactor*, unsigned, ConstraintTree*, ConstraintTree*, unsigned); void updateGroups (unsigned group1, unsigned group2); bool proper ( const ProbFormula&, ConstraintTree, const ProbFormula&, ConstraintTree) const; bool identical ( const ProbFormula&, ConstraintTree, const ProbFormula&, ConstraintTree) const; bool disjoint ( const ProbFormula&, ConstraintTree, const ProbFormula&, ConstraintTree) const; list pfList_; }; #endif // HORUS_PARFACTORLIST_H