#ifndef YAP_PACKAGES_CLPBN_HORUS_BAYESBALLGRAPH_H_ #define YAP_PACKAGES_CLPBN_HORUS_BAYESBALLGRAPH_H_ #include #include #include "Var.h" #include "Horus.h" namespace Horus { class BBNode : public Var { public: BBNode (Var* v) : Var (v), visited_(false), markedOnTop_(false), markedOnBottom_(false) { } const std::vector& childs (void) const { return childs_; } std::vector& childs (void) { return childs_; } const std::vector& parents (void) const { return parents_; } std::vector& parents (void) { return parents_; } void addParent (BBNode* p) { parents_.push_back (p); } void addChild (BBNode* c) { childs_.push_back (c); } bool isVisited (void) const { return visited_; } void setAsVisited (void) { visited_ = true; } bool isMarkedOnTop (void) const { return markedOnTop_; } void markOnTop (void) { markedOnTop_ = true; } bool isMarkedOnBottom (void) const { return markedOnBottom_; } void markOnBottom (void) { markedOnBottom_ = true; } void clear (void) { visited_ = markedOnTop_ = markedOnBottom_ = false; } private: bool visited_; bool markedOnTop_; bool markedOnBottom_; std::vector childs_; std::vector parents_; }; class BayesBallGraph { public: BayesBallGraph (void) { } bool empty (void) const { return nodes_.empty(); } void addNode (BBNode* n); void addEdge (VarId vid1, VarId vid2); const BBNode* getNode (VarId vid) const; BBNode* getNode (VarId vid); void setIndexes (void); void clear (void); void exportToGraphViz (const char*); private: std::vector nodes_; std::unordered_map varMap_; }; } // namespace Horus #endif // YAP_PACKAGES_CLPBN_HORUS_BAYESBALLGRAPH_H_