2012-03-22 11:33:24 +00:00
|
|
|
#ifndef HORUS_PARFACTORLIST_H
|
|
|
|
#define HORUS_PARFACTORLIST_H
|
|
|
|
|
|
|
|
#include <list>
|
2012-03-31 23:27:37 +01:00
|
|
|
#include <queue>
|
2012-03-22 11:33:24 +00:00
|
|
|
|
|
|
|
#include "Parfactor.h"
|
|
|
|
#include "ProbFormula.h"
|
|
|
|
|
|
|
|
|
|
|
|
using namespace std;
|
|
|
|
|
|
|
|
|
|
|
|
class ParfactorList
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
ParfactorList (void) { }
|
|
|
|
|
2012-03-31 23:27:37 +01:00
|
|
|
ParfactorList (const ParfactorList&);
|
2012-03-22 11:33:24 +00:00
|
|
|
|
2012-03-31 23:27:37 +01:00
|
|
|
ParfactorList (const Parfactors&);
|
|
|
|
|
|
|
|
~ParfactorList (void);
|
|
|
|
|
|
|
|
const list<Parfactor*>& parfactors (void) const { return pfList_; }
|
|
|
|
|
|
|
|
void clear (void) { pfList_.clear(); }
|
2012-03-22 11:33:24 +00:00
|
|
|
|
2012-03-31 23:27:37 +01:00
|
|
|
unsigned size (void) const { return pfList_.size(); }
|
2012-03-22 11:33:24 +00:00
|
|
|
|
|
|
|
typedef std::list<Parfactor*>::iterator iterator;
|
2012-03-31 23:27:37 +01:00
|
|
|
|
2012-03-22 11:33:24 +00:00
|
|
|
iterator begin (void) { return pfList_.begin(); }
|
2012-03-31 23:27:37 +01:00
|
|
|
|
|
|
|
iterator end (void) { return pfList_.end(); }
|
2012-03-22 11:33:24 +00:00
|
|
|
|
|
|
|
typedef std::list<Parfactor*>::const_iterator const_iterator;
|
2012-03-31 23:27:37 +01:00
|
|
|
|
2012-03-22 11:33:24 +00:00
|
|
|
const_iterator begin (void) const { return pfList_.begin(); }
|
2012-03-31 23:27:37 +01:00
|
|
|
|
|
|
|
const_iterator end (void) const { return pfList_.end(); }
|
|
|
|
|
|
|
|
void add (Parfactor* pf);
|
|
|
|
|
|
|
|
void add (const Parfactors& pfs);
|
|
|
|
|
|
|
|
void addShattered (Parfactor* pf);
|
|
|
|
|
|
|
|
list<Parfactor*>::iterator insertShattered (
|
|
|
|
list<Parfactor*>::iterator, Parfactor*);
|
|
|
|
|
|
|
|
list<Parfactor*>::iterator remove (list<Parfactor*>::iterator);
|
|
|
|
|
|
|
|
list<Parfactor*>::iterator removeAndDelete (list<Parfactor*>::iterator);
|
|
|
|
|
|
|
|
bool isAllShattered (void) const;
|
2012-03-22 11:33:24 +00:00
|
|
|
|
|
|
|
void print (void) const;
|
|
|
|
|
|
|
|
private:
|
2012-03-31 23:27:37 +01:00
|
|
|
|
|
|
|
bool isShattered (const Parfactor*, const Parfactor*) const;
|
|
|
|
|
|
|
|
void addToShatteredList (Parfactor*);
|
|
|
|
|
|
|
|
std::pair<Parfactors, Parfactors> shatter (
|
|
|
|
Parfactor*, Parfactor*);
|
|
|
|
|
|
|
|
std::pair<Parfactors, Parfactors> shatter (
|
2012-04-03 11:58:21 +01:00
|
|
|
unsigned, Parfactor*, unsigned, Parfactor*);
|
2012-03-31 23:27:37 +01:00
|
|
|
|
|
|
|
Parfactors shatter (
|
|
|
|
Parfactor*,
|
2012-04-03 11:58:21 +01:00
|
|
|
unsigned,
|
2012-03-31 23:27:37 +01:00
|
|
|
ConstraintTree*,
|
|
|
|
ConstraintTree*,
|
|
|
|
unsigned);
|
2012-03-22 11:33:24 +00:00
|
|
|
|
2012-03-31 23:27:37 +01:00
|
|
|
void unifyGroups (unsigned group1, unsigned group2);
|
2012-03-22 11:33:24 +00:00
|
|
|
|
2012-03-31 23:27:37 +01:00
|
|
|
bool proper (
|
|
|
|
const ProbFormula&, ConstraintTree,
|
|
|
|
const ProbFormula&, ConstraintTree) const;
|
2012-03-22 11:33:24 +00:00
|
|
|
|
2012-03-31 23:27:37 +01:00
|
|
|
bool identical (
|
|
|
|
const ProbFormula&, ConstraintTree,
|
|
|
|
const ProbFormula&, ConstraintTree) const;
|
2012-03-22 11:33:24 +00:00
|
|
|
|
2012-03-31 23:27:37 +01:00
|
|
|
bool disjoint (
|
|
|
|
const ProbFormula&, ConstraintTree,
|
|
|
|
const ProbFormula&, ConstraintTree) const;
|
2012-03-22 11:33:24 +00:00
|
|
|
|
2012-03-31 23:27:37 +01:00
|
|
|
list<Parfactor*> pfList_;
|
2012-03-22 11:33:24 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
#endif // HORUS_PARFACTORLIST_H
|
|
|
|
|