// Version: $Id: 5554340de26fe2cb59c85f99f3426930fe56a9b9 $ // // // Commentary: // // // Change Log: // // // Code: #pragma once #include "dtkGraphTemplateEdge.h" #include // ///////////////////////////////////////////////////////////////// // dtkGraphTemplate interface // ///////////////////////////////////////////////////////////////// template < typename Node, typename Edge > class dtkGraphTemplate {}; template < typename Node, typename Edge > class dtkGraphTemplate { public: dtkGraphTemplate(void) = default; dtkGraphTemplate(const dtkGraphTemplate& o); virtual ~dtkGraphTemplate(void); public: dtkGraphTemplate& operator = (const dtkGraphTemplate& o); public: QString description(void) const; public: void clear(void); public: bool contains(Node *n) const; bool contains(const Edge& e) const; public: virtual void addNode(Node *n); virtual void addEdge(const Edge& e); virtual void removeNode(Node *n); virtual void removeEdge(const Edge& e); public: QList rootNodes(void) const; QList succcessors(Node *n) const; QList predecessors(Node *n) const; public: const QList& nodes(void) const; const QList& edges(void) const; public: QList topologicalSort(void) const; public: dtkGraphTemplate subgraph(Node *from, Node *to) const; protected: QList m_nodes; QList m_edges; QHash< Node *, QList > m_predecessors; QHash< Node *, QList > m_successors; }; // ///////////////////////////////////////////////////////////////// #include "dtkGraphTemplate.tpp" // // dtkGraphTemplate.h ends here