## [0513cd]: src / include / graph / Graph.h Maximize Restore History

 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58``` ```#ifndef GRAPH_H_ #define GRAPH_H_ #include #include #include namespace jags { /** * A graph is a container class for (pointers to) Nodes. A Node may * belong to several Graphs. Further, if Node N is in graph G, then * there is no requirement that the parents or children of N lie in G. * * @short Container class for nodes */ class Graph : public std::set { /* forbid copying */ Graph(Graph const &orig); Graph &operator=(Graph const &rhs); public: /** * Creates an empty graph */ Graph(); /** * Checks to see whether the node is contained in the Graph. */ bool contains(Node const *node) const; /** * Checks if the parents and children of every node in the * graph are also contained in the graph. */ bool isClosed() const; /** * Adds all nodes in the graph to the given vector with partial * ordering, so that if A is an ancestor of B, then B never appears * before A in the vector (Note that if there is a path from A to B * outside of the graph, then this is ignored). * * The graph must be acyclic. * * @param sorted Empty vector of Node pointers. On exit * this vector will contain the sorted nodes. */ void getSortedNodes(std::vector &sorted) const; /** * Static version of the getSortedNodes function which works with * a set instead of a graph. */ static void getSortedNodes(std::set &nodes, std::vector &sorted); }; } /* namespace jags */ #endif /* GRAPH_H_ */ ```