1.1 --- a/src/work/marci/graph_wrapper.h Tue Apr 06 12:00:34 2004 +0000
1.2 +++ b/src/work/marci/graph_wrapper.h Wed Apr 07 10:57:58 2004 +0000
1.3 @@ -6,158 +6,154 @@
1.4
1.5 namespace hugo {
1.6
1.7 - template<typename Graph>
1.8 - class TrivGraphWrapper {
1.9 - protected:
1.10 - Graph* graph;
1.11 +// template<typename Graph>
1.12 +// class TrivGraphWrapper {
1.13 +// protected:
1.14 +// Graph* graph;
1.15
1.16 - public:
1.17 -// typedef Graph BaseGraph;
1.18 - typedef Graph ParentGraph;
1.19 +// public:
1.20 +// // typedef Graph BaseGraph;
1.21 +// typedef Graph ParentGraph;
1.22
1.23 -// TrivGraphWrapper() : graph(0) { }
1.24 - TrivGraphWrapper(Graph& _graph) : graph(&_graph) { }
1.25 -// void setGraph(Graph& _graph) { graph = &_graph; }
1.26 -// Graph& getGraph() const { return *graph; }
1.27 +// // TrivGraphWrapper() : graph(0) { }
1.28 +// TrivGraphWrapper(Graph& _graph) : graph(&_graph) { }
1.29 +// // void setGraph(Graph& _graph) { graph = &_graph; }
1.30 +// // Graph& getGraph() const { return *graph; }
1.31
1.32 - typedef typename Graph::Node Node;
1.33 - class NodeIt : public Graph::NodeIt {
1.34 - public:
1.35 - NodeIt() { }
1.36 - NodeIt(const typename Graph::NodeIt& n) : Graph::NodeIt(n) { }
1.37 -// NodeIt(const typename BaseGraph::NodeIt& n) : Graph::NodeIt(n) { }
1.38 - NodeIt(const Invalid& i) : Graph::NodeIt(i) { }
1.39 - NodeIt(const TrivGraphWrapper<Graph>& _G) :
1.40 - Graph::NodeIt(*(_G.graph)) { }
1.41 -// operator typename BaseGraph::NodeIt() {
1.42 -// return typename BaseGraph::NodeIt(this->Graph::NodeIt);
1.43 -// }
1.44 - };
1.45 - typedef typename Graph::Edge Edge;
1.46 - class OutEdgeIt : public Graph::OutEdgeIt {
1.47 - public:
1.48 - OutEdgeIt() { }
1.49 - OutEdgeIt(const typename Graph::OutEdgeIt& e) : Graph::OutEdgeIt(e) { }
1.50 - OutEdgeIt(const Invalid& i) : Graph::OutEdgeIt(i) { }
1.51 - OutEdgeIt(const TrivGraphWrapper<Graph>& _G, const Node& n) :
1.52 - Graph::OutEdgeIt(*(_G.graph), n) { }
1.53 - };
1.54 - class InEdgeIt : public Graph::InEdgeIt {
1.55 - public:
1.56 - InEdgeIt() { }
1.57 - InEdgeIt(const typename Graph::InEdgeIt& e) : Graph::InEdgeIt(e) { }
1.58 - InEdgeIt(const Invalid& i) : Graph::InEdgeIt(i) { }
1.59 - InEdgeIt(const TrivGraphWrapper<Graph>& _G, const Node& n) :
1.60 - Graph::InEdgeIt(*(_G.graph), n) { }
1.61 - };
1.62 - //typedef typename Graph::SymEdgeIt SymEdgeIt;
1.63 - class EdgeIt : public Graph::EdgeIt {
1.64 - public:
1.65 - EdgeIt() { }
1.66 - EdgeIt(const typename Graph::EdgeIt& e) : Graph::EdgeIt(e) { }
1.67 - EdgeIt(const Invalid& i) : Graph::EdgeIt(i) { }
1.68 - EdgeIt(const TrivGraphWrapper<Graph>& _G) :
1.69 - Graph::EdgeIt(*(_G.graph)) { }
1.70 - };
1.71 +// typedef typename Graph::Node Node;
1.72 +// class NodeIt : public Graph::NodeIt {
1.73 +// public:
1.74 +// NodeIt() { }
1.75 +// NodeIt(const typename Graph::NodeIt& n) : Graph::NodeIt(n) { }
1.76 +// NodeIt(const Invalid& i) : Graph::NodeIt(i) { }
1.77 +// NodeIt(const TrivGraphWrapper<Graph>& _G) :
1.78 +// Graph::NodeIt(*(_G.graph)) { }
1.79 +// };
1.80 +// typedef typename Graph::Edge Edge;
1.81 +// class OutEdgeIt : public Graph::OutEdgeIt {
1.82 +// public:
1.83 +// OutEdgeIt() { }
1.84 +// OutEdgeIt(const typename Graph::OutEdgeIt& e) : Graph::OutEdgeIt(e) { }
1.85 +// OutEdgeIt(const Invalid& i) : Graph::OutEdgeIt(i) { }
1.86 +// OutEdgeIt(const TrivGraphWrapper<Graph>& _G, const Node& n) :
1.87 +// Graph::OutEdgeIt(*(_G.graph), n) { }
1.88 +// };
1.89 +// class InEdgeIt : public Graph::InEdgeIt {
1.90 +// public:
1.91 +// InEdgeIt() { }
1.92 +// InEdgeIt(const typename Graph::InEdgeIt& e) : Graph::InEdgeIt(e) { }
1.93 +// InEdgeIt(const Invalid& i) : Graph::InEdgeIt(i) { }
1.94 +// InEdgeIt(const TrivGraphWrapper<Graph>& _G, const Node& n) :
1.95 +// Graph::InEdgeIt(*(_G.graph), n) { }
1.96 +// };
1.97 +// //typedef typename Graph::SymEdgeIt SymEdgeIt;
1.98 +// class EdgeIt : public Graph::EdgeIt {
1.99 +// public:
1.100 +// EdgeIt() { }
1.101 +// EdgeIt(const typename Graph::EdgeIt& e) : Graph::EdgeIt(e) { }
1.102 +// EdgeIt(const Invalid& i) : Graph::EdgeIt(i) { }
1.103 +// EdgeIt(const TrivGraphWrapper<Graph>& _G) :
1.104 +// Graph::EdgeIt(*(_G.graph)) { }
1.105 +// };
1.106
1.107 - NodeIt& first(NodeIt& i) const {
1.108 - i=NodeIt(*this);
1.109 - return i;
1.110 - }
1.111 -// template<typename I> I& first(I& i) const {
1.112 -// i=I(*this);
1.113 +// NodeIt& first(NodeIt& i) const {
1.114 +// i=NodeIt(*this);
1.115 // return i;
1.116 // }
1.117 - OutEdgeIt& first(OutEdgeIt& i, const Node& p) const {
1.118 - i=OutEdgeIt(*this, p);
1.119 - return i;
1.120 - }
1.121 - InEdgeIt& first(InEdgeIt& i, const Node& p) const {
1.122 - i=InEdgeIt(*this, p);
1.123 - return i;
1.124 - }
1.125 - EdgeIt& first(EdgeIt& i) const {
1.126 - i=EdgeIt(*this);
1.127 - return i;
1.128 - }
1.129 -// template<typename I, typename P> I& first(I& i, const P& p) const {
1.130 -// i=I(*this, p);
1.131 +// OutEdgeIt& first(OutEdgeIt& i, const Node& p) const {
1.132 +// i=OutEdgeIt(*this, p);
1.133 // return i;
1.134 // }
1.135 +// InEdgeIt& first(InEdgeIt& i, const Node& p) const {
1.136 +// i=InEdgeIt(*this, p);
1.137 +// return i;
1.138 +// }
1.139 +// EdgeIt& first(EdgeIt& i) const {
1.140 +// i=EdgeIt(*this);
1.141 +// return i;
1.142 +// }
1.143 +// // template<typename I> I& first(I& i) const {
1.144 +// // i=I(*this);
1.145 +// // return i;
1.146 +// // }
1.147 +// // template<typename I, typename P> I& first(I& i, const P& p) const {
1.148 +// // i=I(*this, p);
1.149 +// // return i;
1.150 +// // }
1.151
1.152 -// template<typename I> I getNext(const I& i) const {
1.153 -// return graph->getNext(i); }
1.154 -// template<typename I> I& next(I &i) const { graph->next(i); return i; }
1.155 - NodeIt& next(NodeIt& i) const { graph->next(i); return i; }
1.156 - OutEdgeIt& next(OutEdgeIt& i) const { graph->next(i); return i; }
1.157 - InEdgeIt& next(InEdgeIt& i) const { graph->next(i); return i; }
1.158 - EdgeIt& next(EdgeIt& i) const { graph->next(i); return i; }
1.159 +// // template<typename I> I getNext(const I& i) const {
1.160 +// // return graph->getNext(i); }
1.161
1.162 - template< typename It > It first() const {
1.163 - It e; this->first(e); return e; }
1.164 +// NodeIt& next(NodeIt& i) const { graph->next(i); return i; }
1.165 +// OutEdgeIt& next(OutEdgeIt& i) const { graph->next(i); return i; }
1.166 +// InEdgeIt& next(InEdgeIt& i) const { graph->next(i); return i; }
1.167 +// EdgeIt& next(EdgeIt& i) const { graph->next(i); return i; }
1.168 +// // template<typename I> I& next(I &i) const { graph->next(i); return i; }
1.169 +// template< typename It > It first() const {
1.170 +// It e; this->first(e); return e; }
1.171
1.172 - template< typename It > It first(const Node& v) const {
1.173 - It e; this->first(e, v); return e; }
1.174 +// template< typename It > It first(const Node& v) const {
1.175 +// It e; this->first(e, v); return e; }
1.176
1.177 - Node head(const Edge& e) const { return graph->head(e); }
1.178 - Node tail(const Edge& e) const { return graph->tail(e); }
1.179 +// Node head(const Edge& e) const { return graph->head(e); }
1.180 +// Node tail(const Edge& e) const { return graph->tail(e); }
1.181
1.182 - template<typename I> bool valid(const I& i) const {
1.183 - return graph->valid(i); }
1.184 +// template<typename I> bool valid(const I& i) const {
1.185 +// return graph->valid(i); }
1.186
1.187 - //template<typename I> void setInvalid(const I &i);
1.188 - //{ return graph->setInvalid(i); }
1.189 +// //template<typename I> void setInvalid(const I &i);
1.190 +// //{ return graph->setInvalid(i); }
1.191
1.192 - int nodeNum() const { return graph->nodeNum(); }
1.193 - int edgeNum() const { return graph->edgeNum(); }
1.194 +// int nodeNum() const { return graph->nodeNum(); }
1.195 +// int edgeNum() const { return graph->edgeNum(); }
1.196
1.197 - template<typename I> Node aNode(const I& e) const {
1.198 - return graph->aNode(e); }
1.199 - template<typename I> Node bNode(const I& e) const {
1.200 - return graph->bNode(e); }
1.201 +// template<typename I> Node aNode(const I& e) const {
1.202 +// return graph->aNode(e); }
1.203 +// template<typename I> Node bNode(const I& e) const {
1.204 +// return graph->bNode(e); }
1.205
1.206 - Node addNode() const { return graph->addNode(); }
1.207 - Edge addEdge(const Node& tail, const Node& head) const {
1.208 - return graph->addEdge(tail, head); }
1.209 +// Node addNode() const { return graph->addNode(); }
1.210 +// Edge addEdge(const Node& tail, const Node& head) const {
1.211 +// return graph->addEdge(tail, head); }
1.212
1.213 - template<typename I> void erase(const I& i) const { graph->erase(i); }
1.214 +// template<typename I> void erase(const I& i) const { graph->erase(i); }
1.215
1.216 - void clear() const { graph->clear(); }
1.217 +// void clear() const { graph->clear(); }
1.218
1.219 - template<typename T> class NodeMap : public Graph::NodeMap<T> {
1.220 - public:
1.221 - NodeMap(const TrivGraphWrapper<Graph>& _G) :
1.222 - Graph::NodeMap<T>(*(_G.graph)) { }
1.223 - NodeMap(const TrivGraphWrapper<Graph>& _G, T a) :
1.224 - Graph::NodeMap<T>(*(_G.graph), a) { }
1.225 - };
1.226 -
1.227 - template<typename T> class EdgeMap : public Graph::EdgeMap<T> {
1.228 - public:
1.229 - EdgeMap(const TrivGraphWrapper<Graph>& _G) :
1.230 - Graph::EdgeMap<T>(*(_G.graph)) { }
1.231 - EdgeMap(const TrivGraphWrapper<Graph>& _G, T a) :
1.232 - Graph::EdgeMap<T>(*(_G.graph), a) { }
1.233 - };
1.234 -
1.235 -// template<typename Map, typename T> class NodeMapWrapper {
1.236 -// protected:
1.237 -// Map* map;
1.238 +// template<typename T> class NodeMap : public Graph::NodeMap<T> {
1.239 // public:
1.240 -// NodeMapWrapper(Map& _map) : map(&_map) { }
1.241 -// void set(Node n, T a) { map->set(n, a); }
1.242 -// T get(Node n) const { return map->get(n); }
1.243 +// NodeMap(const TrivGraphWrapper<Graph>& _G) :
1.244 +// Graph::NodeMap<T>(*(_G.graph)) { }
1.245 +// NodeMap(const TrivGraphWrapper<Graph>& _G, T a) :
1.246 +// Graph::NodeMap<T>(*(_G.graph), a) { }
1.247 // };
1.248
1.249 -// template<typename Map, typename T> class EdgeMapWrapper {
1.250 -// protected:
1.251 -// Map* map;
1.252 +// template<typename T> class EdgeMap : public Graph::EdgeMap<T> {
1.253 // public:
1.254 -// EdgeMapWrapper(Map& _map) : map(&_map) { }
1.255 -// void set(Edge n, T a) { map->set(n, a); }
1.256 -// T get(Edge n) const { return map->get(n); }
1.257 +// EdgeMap(const TrivGraphWrapper<Graph>& _G) :
1.258 +// Graph::EdgeMap<T>(*(_G.graph)) { }
1.259 +// EdgeMap(const TrivGraphWrapper<Graph>& _G, T a) :
1.260 +// Graph::EdgeMap<T>(*(_G.graph), a) { }
1.261 // };
1.262 - };
1.263 +
1.264 +// // template<typename Map, typename T> class NodeMapWrapper {
1.265 +// // protected:
1.266 +// // Map* map;
1.267 +// // public:
1.268 +// // NodeMapWrapper(Map& _map) : map(&_map) { }
1.269 +// // void set(Node n, T a) { map->set(n, a); }
1.270 +// // T get(Node n) const { return map->get(n); }
1.271 +// // };
1.272 +
1.273 +// // template<typename Map, typename T> class EdgeMapWrapper {
1.274 +// // protected:
1.275 +// // Map* map;
1.276 +// // public:
1.277 +// // EdgeMapWrapper(Map& _map) : map(&_map) { }
1.278 +// // void set(Edge n, T a) { map->set(n, a); }
1.279 +// // T get(Edge n) const { return map->get(n); }
1.280 +// // };
1.281 +// };
1.282
1.283
1.284 template<typename Graph>
1.285 @@ -176,48 +172,64 @@
1.286
1.287 typedef typename Graph::Node Node;
1.288 class NodeIt : public Graph::NodeIt {
1.289 + typedef typename Graph::NodeIt GraphNodeIt;
1.290 public:
1.291 NodeIt() { }
1.292 NodeIt(const typename Graph::NodeIt& n) : Graph::NodeIt(n) { }
1.293 NodeIt(const Invalid& i) : Graph::NodeIt(i) { }
1.294 NodeIt(const GraphWrapper<Graph>& _G) :
1.295 Graph::NodeIt(*(_G.graph)) { }
1.296 +// operator Node() const {
1.297 +// std::cout << "ize" << std::endl;
1.298 +// return Node(this->GraphNodeIt);
1.299 +// }
1.300 };
1.301 typedef typename Graph::Edge Edge;
1.302 class OutEdgeIt : public Graph::OutEdgeIt {
1.303 + typedef typename Graph::OutEdgeIt GraphOutEdgeIt;
1.304 public:
1.305 OutEdgeIt() { }
1.306 OutEdgeIt(const typename Graph::OutEdgeIt& e) : Graph::OutEdgeIt(e) { }
1.307 OutEdgeIt(const Invalid& i) : Graph::OutEdgeIt(i) { }
1.308 OutEdgeIt(const GraphWrapper<Graph>& _G, const Node& n) :
1.309 Graph::OutEdgeIt(*(_G.graph), n) { }
1.310 +// operator Edge() const {
1.311 +// std::cout << "ize" << std::endl;
1.312 +// return Edge(this->GraphOutEdgeIt);
1.313 +// }
1.314 };
1.315 class InEdgeIt : public Graph::InEdgeIt {
1.316 + typedef typename Graph::InEdgeIt GraphInEdgeIt;
1.317 public:
1.318 InEdgeIt() { }
1.319 InEdgeIt(const typename Graph::InEdgeIt& e) : Graph::InEdgeIt(e) { }
1.320 InEdgeIt(const Invalid& i) : Graph::InEdgeIt(i) { }
1.321 InEdgeIt(const GraphWrapper<Graph>& _G, const Node& n) :
1.322 Graph::InEdgeIt(*(_G.graph), n) { }
1.323 +// operator Edge() const {
1.324 +// std::cout << "ize" << std::endl;
1.325 +// return Edge(this->InOutEdgeIt);
1.326 +// }
1.327 };
1.328 //typedef typename Graph::SymEdgeIt SymEdgeIt;
1.329 class EdgeIt : public Graph::EdgeIt {
1.330 + typedef typename Graph::EdgeIt GraphEdgeIt;
1.331 public:
1.332 EdgeIt() { }
1.333 EdgeIt(const typename Graph::EdgeIt& e) : Graph::EdgeIt(e) { }
1.334 EdgeIt(const Invalid& i) : Graph::EdgeIt(i) { }
1.335 EdgeIt(const GraphWrapper<Graph>& _G) :
1.336 Graph::EdgeIt(*(_G.graph)) { }
1.337 +// operator Edge() const {
1.338 +// std::cout << "ize" << std::endl;
1.339 +// return Edge(this->GraphEdgeIt);
1.340 +// }
1.341 };
1.342
1.343 NodeIt& first(NodeIt& i) const {
1.344 i=NodeIt(*this);
1.345 return i;
1.346 }
1.347 -// template<typename I> I& first(I& i) const {
1.348 -// i=I(*this);
1.349 -// return i;
1.350 -// }
1.351 OutEdgeIt& first(OutEdgeIt& i, const Node& p) const {
1.352 i=OutEdgeIt(*this, p);
1.353 return i;
1.354 @@ -230,6 +242,10 @@
1.355 i=EdgeIt(*this);
1.356 return i;
1.357 }
1.358 +// template<typename I> I& first(I& i) const {
1.359 +// i=I(*this);
1.360 +// return i;
1.361 +// }
1.362 // template<typename I, typename P> I& first(I& i, const P& p) const {
1.363 // i=I(*this, p);
1.364 // return i;
1.365 @@ -237,12 +253,12 @@
1.366
1.367 // template<typename I> I getNext(const I& i) const {
1.368 // return gw.getNext(i); }
1.369 -// template<typename I> I& next(I &i) const { graph->next(i); return i; }
1.370 +
1.371 NodeIt& next(NodeIt& i) const { graph->next(i); return i; }
1.372 OutEdgeIt& next(OutEdgeIt& i) const { graph->next(i); return i; }
1.373 InEdgeIt& next(InEdgeIt& i) const { graph->next(i); return i; }
1.374 EdgeIt& next(EdgeIt& i) const { graph->next(i); return i; }
1.375 -
1.376 +// template<typename I> I& next(I &i) const { graph->next(i); return i; }
1.377 template< typename It > It first() const {
1.378 It e; this->first(e); return e; }
1.379
1.380 @@ -251,6 +267,7 @@
1.381
1.382 Node head(const Edge& e) const { return graph->head(e); }
1.383 Node tail(const Edge& e) const { return graph->tail(e); }
1.384 +// Node tail(const OutEdgeIt& e) const { return graph->tail(Edge(e)); }
1.385
1.386 template<typename I> bool valid(const I& i) const {
1.387 return graph->valid(i); }