#ifndef YAP_PACKAGES_CLPBN_HORUS_PARFACTORLIST_H_ #define YAP_PACKAGES_CLPBN_HORUS_PARFACTORLIST_H_ #include #include "Parfactor.h" #include "ProbFormula.h" namespace Horus { class Parfactor; class ParfactorList { public: ParfactorList() { } ParfactorList (const ParfactorList&); ParfactorList (const Parfactors&); ~ParfactorList(); const std::list& parfactors() const { return pfList_; } void clear() { pfList_.clear(); } size_t size() const { return pfList_.size(); } typedef std::list::iterator iterator; iterator begin() { return pfList_.begin(); } iterator end() { return pfList_.end(); } typedef std::list::const_iterator const_iterator; const_iterator begin() const { return pfList_.begin(); } const_iterator end() const { return pfList_.end(); } void add (Parfactor* pf); void add (const Parfactors& pfs); void addShattered (Parfactor* pf); std::list::iterator insertShattered ( std::list::iterator, Parfactor*); std::list::iterator remove ( std::list::iterator); std::list::iterator removeAndDelete ( std::list::iterator); bool isAllShattered() const; void print() const; ParfactorList& operator= (const ParfactorList& pfList); private: bool isShattered (const Parfactor*) const; bool isShattered (const Parfactor*, const Parfactor*) const; void addToShatteredList (Parfactor*); Parfactors shatterAgainstMySelf (Parfactor* g); Parfactors shatterAgainstMySelf2 (Parfactor* g); Parfactors shatterAgainstMySelf ( Parfactor* g, size_t fIdx1, size_t fIdx2); std::pair shatter ( Parfactor*, Parfactor*); std::pair shatter ( size_t, Parfactor*, size_t, Parfactor*); Parfactors shatter ( Parfactor*, size_t, ConstraintTree*, ConstraintTree*, PrvGroup); void updateGroups (PrvGroup group1, PrvGroup 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; std::list pfList_; }; } // namespace Horus #endif // YAP_PACKAGES_CLPBN_HORUS_PARFACTORLIST_H_