#include #include #include #include #include #include "Graph.h" #include "CostModel.h" using std::map; using std::stack; using std::string; using std::vector; class GraphManager { public: static GraphManager * Instance(); void buildGraph(const string &); void printGraph() const; Graph& getGraph() { return graph; } void printTotalEdgeCount() const; void printModel() const { cout << model; } void findCycles(); void printCycles() const; void printEdgeCount(const Graph&) const; void printComponentSummary() const; void breakCycles(); void printEdgesRemoved() const; void buildGPrime(); void printGPrime() const; bool isClass(const string&) const; void printClassList() const; void addClassToClassList(const string& this_class) { classList.push_back(this_class); } void findOrder(); void printOrder(); void printIndegrees() const; int incrIndegree(const string& name); private: GraphManager() : nestedClassCount(0) { model.setWeights(); } GraphManager(const GraphManager&) {} Graph graph; Graph GPrime; Graph edgesRemoved; int nestedClassCount; static GraphManager * _instance; vector classList; list components; stack order; CostModel model; map indegrees; };