#ifndef HORUS_BAYESNET_H #define HORUS_BAYESNET_H #include #include #include #include #include "Var.h" #include "Horus.h" using namespace std; class Var; class DAGraphNode : public Var { public: DAGraphNode (Var* v) : Var (v) , visited_(false), markedOnTop_(false), markedOnBottom_(false) { } const vector& childs (void) const { return childs_; } vector& childs (void) { return childs_; } const vector& parents (void) const { return parents_; } vector& parents (void) { return parents_; } void addParent (DAGraphNode* p) { parents_.push_back (p); } void addChild (DAGraphNode* 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_; vector childs_; vector parents_; }; class DAGraph { public: DAGraph (void) { } void addNode (DAGraphNode* n); void addEdge (VarId vid1, VarId vid2); const DAGraphNode* getNode (VarId vid) const; DAGraphNode* getNode (VarId vid); bool empty (void) const { return nodes_.empty(); } void setIndexes (void); void clear (void); void exportToGraphViz (const char*); private: vector nodes_; unordered_map varMap_; }; #endif // HORUS_BAYESNET_H