/******************************************************* ** Name: arc.h ** Author: Leo Liberti ** Source: GNU C++ ** Purpose: www exploring topologizer - arc class (header) ** History: 060820 work started *******************************************************/ #ifndef _WETARCH #define _WETARCH class Arc { public: Arc(int IDFrom, int IDTo); ~Arc(); int getFrom(void) const; int getTo(void) const; private: int from; int to; }; #endif
/******************************************************* ** Name: arc.cxx ** Author: Leo Liberti ** Source: GNU C++ ** Purpose: www exploring topologizer - arc class ** History: 060820 work started *******************************************************/ #include "arc.h" Arc::Arc(int fromID, int toID) : from(fromID), to(toID) { } Arc::~Arc() { } int Arc::getFrom(void) const { return from; } int Arc::getTo(void) const { return to; }
/******************************************************* ** Name: digraph.h ** Author: Leo Liberti ** Source: GNU C++ ** Purpose: www exploring topologizer - digraph class (header) ** History: 060820 work started *******************************************************/ #ifndef _WETDIGRAPHH #define _WETDIGRAPHH #include<vector> #include "vertex.h" #include "vertexurl.h" #include "arc.h" #include "timestamp.h" class DigraphException { public: DigraphException(); ~DigraphException(); }; class Digraph { public: Digraph(); ~Digraph(); void setTimeStamp(TimeStamp& ts); TimeStamp& getTimeStamp(void); int getNumberOfVertices(void) const; int getNumberOfArcs(void) const; void addVertex(Vertex& theVertex); void addArc(Arc& theArc); Vertex& getVertex(int i) throw(DigraphException); Arc& getArc(int i) throw(DigraphException); private: std::vector<Vertex*> vertexPtr; std::vector<Arc*> arcPtr; TimeStamp ts; }; std::ostream& operator<< (std::ostream& out, Digraph& G); #endif
/******************************************************* ** Name: digraph.cxx ** Author: Leo Liberti ** Source: GNU C++ ** Purpose: www exploring topologizer - digraph class ** History: 060820 work started *******************************************************/ #include<iostream> #include "digraph.h" DigraphException::DigraphException() { } DigraphException::~DigraphException() { } Digraph::Digraph() { } Digraph::~Digraph() { using namespace std; // delete vertices and arcs for(vector<Vertex*>::iterator vi = vertexPtr.begin(); vi != vertexPtr.end(); vi++) { delete *vi; } for(vector<Arc*>::iterator vi = arcPtr.begin(); vi != arcPtr.end(); vi++) { delete *vi; } #ifdef DEBUG std::cerr << "** destroying Digraph " << this << std::endl; #endif } int Digraph::getNumberOfVertices(void) const { return vertexPtr.size(); } int Digraph::getNumberOfArcs(void) const { return arcPtr.size(); } void Digraph::addVertex(Vertex& theVertex) { vertexPtr.push_back(&theVertex); } void Digraph::addArc(Arc& theArc) { arcPtr.push_back(&theArc); } Vertex& Digraph::getVertex(int i) throw(DigraphException) { using namespace std; if (i < 0 || i >= vertexPtr.size()) { cerr << "Digraph::getVertex(" << i << "): index out of bounds" << endl; throw DigraphException(); } return *vertexPtr[i]; } Arc& Digraph::getArc(int i) throw(DigraphException) { using namespace std; if (i < 0 || i >= arcPtr.size()) { cerr << "Digraph::getArc(" << i << "): index out of bounds" << endl; throw DigraphException(); } return *arcPtr[i]; } void Digraph::setTimeStamp(TimeStamp& theTs) { ts = theTs; } TimeStamp& Digraph::getTimeStamp(void) { return ts; } std::ostream& operator<< (std::ostream& out, Digraph& G) { using namespace std; out << "# graphviz output by WET (L. Liberti 2006)" << endl; out << "digraph www_" << G.getTimeStamp().get() << " {" << endl; int n = G.getNumberOfVertices(); for(int i = 0; i < n; i++) { Vertex& v = G.getVertex(i); VertexURL* vptr = dynamic_cast<VertexURL*>(&v); out << " " << i << " [ label = \"" << G.getVertex(i).getText() << "\" ];" << endl; } out << " " << n << " [ label = \"" << G.getTimeStamp() << "\", color = red ];" << endl; int m = G.getNumberOfArcs(); int from, to; for(int i = 0; i < m; i++) { from = G.getArc(i).getFrom(); to = G.getArc(i).getTo(); out << " " << from << " -> " << to << ";" << endl; } out << "}" << endl; }