1.1 --- a/src/work/marci/graph_wrapper.h Mon Apr 05 15:31:21 2004 +0000
1.2 +++ b/src/work/marci/graph_wrapper.h Mon Apr 05 16:52:46 2004 +0000
1.3 @@ -12,7 +12,12 @@
1.4 Graph* graph;
1.5
1.6 public:
1.7 - typedef Graph BaseGraph;
1.8 + typedef Graph ParentGraph;
1.9 +
1.10 +// TrivGraphWrapper() : graph(0) { }
1.11 + TrivGraphWrapper(Graph& _graph) : graph(&_graph) { }
1.12 +// void setGraph(Graph& _graph) { graph = &_graph; }
1.13 +// Graph& getGraph() const { return *graph; }
1.14
1.15 typedef typename Graph::Node Node;
1.16 class NodeIt : public Graph::NodeIt {
1.17 @@ -24,7 +29,6 @@
1.18 Graph::NodeIt(*(_G.graph)) { }
1.19 };
1.20 typedef typename Graph::Edge Edge;
1.21 - //typedef typename Graph::OutEdgeIt OutEdgeIt;
1.22 class OutEdgeIt : public Graph::OutEdgeIt {
1.23 public:
1.24 OutEdgeIt() { }
1.25 @@ -33,7 +37,6 @@
1.26 OutEdgeIt(const TrivGraphWrapper<Graph>& _G, const Node& n) :
1.27 Graph::OutEdgeIt(*(_G.graph), n) { }
1.28 };
1.29 - //typedef typename Graph::InEdgeIt InEdgeIt;
1.30 class InEdgeIt : public Graph::InEdgeIt {
1.31 public:
1.32 InEdgeIt() { }
1.33 @@ -43,7 +46,6 @@
1.34 Graph::InEdgeIt(*(_G.graph), n) { }
1.35 };
1.36 //typedef typename Graph::SymEdgeIt SymEdgeIt;
1.37 - //typedef typename Graph::EdgeIt EdgeIt;
1.38 class EdgeIt : public Graph::EdgeIt {
1.39 public:
1.40 EdgeIt() { }
1.41 @@ -53,12 +55,6 @@
1.42 Graph::EdgeIt(*(_G.graph)) { }
1.43 };
1.44
1.45 - //TrivGraphWrapper() : graph(0) { }
1.46 - TrivGraphWrapper(Graph& _graph) : graph(&_graph) { }
1.47 -
1.48 -// void setGraph(Graph& _graph) { graph = &_graph; }
1.49 -// Graph& getGraph() const { return (*graph); }
1.50 -
1.51 NodeIt& first(NodeIt& i) const {
1.52 i=NodeIt(*this);
1.53 return i;
1.54 @@ -68,7 +64,6 @@
1.55 return i;
1.56 }
1.57 // template<typename I> I& first(I& i) const {
1.58 -// //return graph->first(i);
1.59 // i=I(*this);
1.60 // return i;
1.61 // }
1.62 @@ -81,7 +76,6 @@
1.63 return i;
1.64 }
1.65 // template<typename I, typename P> I& first(I& i, const P& p) const {
1.66 -// //return graph->first(i, p);
1.67 // i=I(*this, p);
1.68 // return i;
1.69 // }
1.70 @@ -91,16 +85,16 @@
1.71 template<typename I> I& next(I &i) const { graph->next(i); return i; }
1.72
1.73 template< typename It > It first() const {
1.74 - It e; first(e); return e; }
1.75 + It e; this->first(e); return e; }
1.76
1.77 template< typename It > It first(const Node& v) const {
1.78 - It e; first(e, v); return e; }
1.79 + It e; this->first(e, v); return e; }
1.80
1.81 Node head(const Edge& e) const { return graph->head(e); }
1.82 Node tail(const Edge& e) const { return graph->tail(e); }
1.83
1.84 - template<typename I> bool valid(const I& i) const
1.85 - { return graph->valid(i); }
1.86 + template<typename I> bool valid(const I& i) const {
1.87 + return graph->valid(i); }
1.88
1.89 //template<typename I> void setInvalid(const I &i);
1.90 //{ return graph->setInvalid(i); }
1.91 @@ -137,107 +131,103 @@
1.92 Graph::EdgeMap<T>(*(_G.graph), a) { }
1.93 };
1.94
1.95 - template<typename Map, typename T> class NodeMapWrapper {
1.96 - protected:
1.97 - Map* map;
1.98 - public:
1.99 - NodeMapWrapper(Map& _map) : map(&_map) { }
1.100 - //template<typename T>
1.101 - void set(Node n, T a) { map->set(n, a); }
1.102 - //template<typename T>
1.103 - T get(Node n) const { return map->get(n); }
1.104 - };
1.105 +// template<typename Map, typename T> class NodeMapWrapper {
1.106 +// protected:
1.107 +// Map* map;
1.108 +// public:
1.109 +// NodeMapWrapper(Map& _map) : map(&_map) { }
1.110 +// void set(Node n, T a) { map->set(n, a); }
1.111 +// T get(Node n) const { return map->get(n); }
1.112 +// };
1.113
1.114 - template<typename Map, typename T> class EdgeMapWrapper {
1.115 - protected:
1.116 - Map* map;
1.117 - public:
1.118 - EdgeMapWrapper(Map& _map) : map(&_map) { }
1.119 - //template<typename T>
1.120 - void set(Edge n, T a) { map->set(n, a); }
1.121 - //template<typename T>
1.122 - T get(Edge n) const { return map->get(n); }
1.123 - };
1.124 +// template<typename Map, typename T> class EdgeMapWrapper {
1.125 +// protected:
1.126 +// Map* map;
1.127 +// public:
1.128 +// EdgeMapWrapper(Map& _map) : map(&_map) { }
1.129 +// void set(Edge n, T a) { map->set(n, a); }
1.130 +// T get(Edge n) const { return map->get(n); }
1.131 +// };
1.132 };
1.133
1.134 - template<typename GraphWrapper>
1.135 - class GraphWrapperSkeleton {
1.136 +
1.137 + template<typename Graph>
1.138 + class GraphWrapper {
1.139 protected:
1.140 - GraphWrapper gw;
1.141 + Graph* graph;
1.142
1.143 public:
1.144 - //typedef typename GraphWrapper::BaseGraph BaseGraph;
1.145 + typedef Graph ParentGraph;
1.146
1.147 -// typedef typename GraphWrapper::Node Node;
1.148 -// typedef typename GraphWrapper::NodeIt NodeIt;
1.149 -
1.150 -// typedef typename GraphWrapper::Edge Edge;
1.151 -// typedef typename GraphWrapper::OutEdgeIt OutEdgeIt;
1.152 -// typedef typename GraphWrapper::InEdgeIt InEdgeIt;
1.153 -// //typedef typename GraphWrapper::SymEdgeIt SymEdgeIt;
1.154 -// typedef typename GraphWrapper::EdgeIt EdgeIt;
1.155 -
1.156 - typedef typename GraphWrapper::Node Node;
1.157 - class NodeIt : public GraphWrapper::NodeIt {
1.158 +// GraphWrapper() : graph(0) { }
1.159 + GraphWrapper(Graph& _graph) : graph(&_graph) { }
1.160 +// void setGraph(Graph& _graph) { graph=&_graph; }
1.161 +// Graph& getGraph() const { return *graph; }
1.162 +
1.163 + typedef typename Graph::Node Node;
1.164 + class NodeIt : public Graph::NodeIt {
1.165 public:
1.166 NodeIt() { }
1.167 - NodeIt(const typename GraphWrapper::NodeIt& n) :
1.168 - GraphWrapper::NodeIt(n) { }
1.169 - NodeIt(const Invalid& i) : GraphWrapper::NodeIt(i) { }
1.170 - NodeIt(const GraphWrapperSkeleton<GraphWrapper>& _G) :
1.171 - GraphWrapper::NodeIt(_G.gw) { }
1.172 + NodeIt(const typename Graph::NodeIt& n) : Graph::NodeIt(n) { }
1.173 + NodeIt(const Invalid& i) : Graph::NodeIt(i) { }
1.174 + NodeIt(const GraphWrapper<Graph>& _G) :
1.175 + Graph::NodeIt(*(_G.graph)) { }
1.176 };
1.177 - typedef typename GraphWrapper::Edge Edge;
1.178 - //typedef typename GraphWrapper::OutEdgeIt OutEdgeIt;
1.179 - class OutEdgeIt : public GraphWrapper::OutEdgeIt {
1.180 + typedef typename Graph::Edge Edge;
1.181 + class OutEdgeIt : public Graph::OutEdgeIt {
1.182 public:
1.183 OutEdgeIt() { }
1.184 - OutEdgeIt(const typename GraphWrapper::OutEdgeIt& e) :
1.185 - GraphWrapper::OutEdgeIt(e) { }
1.186 - OutEdgeIt(const Invalid& i) : GraphWrapper::OutEdgeIt(i) { }
1.187 - OutEdgeIt(const GraphWrapperSkeleton<GraphWrapper>& _G, const Node& n) :
1.188 - GraphWrapper::OutEdgeIt(_G.gw, n) { }
1.189 + OutEdgeIt(const typename Graph::OutEdgeIt& e) : Graph::OutEdgeIt(e) { }
1.190 + OutEdgeIt(const Invalid& i) : Graph::OutEdgeIt(i) { }
1.191 + OutEdgeIt(const GraphWrapper<Graph>& _G, const Node& n) :
1.192 + Graph::OutEdgeIt(*(_G.graph), n) { }
1.193 };
1.194 - //typedef typename GraphWrapper::InEdgeIt InEdgeIt;
1.195 - class InEdgeIt : public GraphWrapper::InEdgeIt {
1.196 + class InEdgeIt : public Graph::InEdgeIt {
1.197 public:
1.198 InEdgeIt() { }
1.199 - InEdgeIt(const typename GraphWrapper::InEdgeIt& e) :
1.200 - GraphWrapper::InEdgeIt(e) { }
1.201 - InEdgeIt(const Invalid& i) : GraphWrapper::InEdgeIt(i) { }
1.202 - InEdgeIt(const GraphWrapperSkeleton<GraphWrapper>& _G, const Node& n) :
1.203 - GraphWrapper::InEdgeIt(_G.gw, n) { }
1.204 + InEdgeIt(const typename Graph::InEdgeIt& e) : Graph::InEdgeIt(e) { }
1.205 + InEdgeIt(const Invalid& i) : Graph::InEdgeIt(i) { }
1.206 + InEdgeIt(const GraphWrapper<Graph>& _G, const Node& n) :
1.207 + Graph::InEdgeIt(*(_G.graph), n) { }
1.208 };
1.209 - //typedef typename GraphWrapper::SymEdgeIt SymEdgeIt;
1.210 - //typedef typename GraphWrapper::EdgeIt EdgeIt;
1.211 - class EdgeIt : public GraphWrapper::EdgeIt {
1.212 + //typedef typename Graph::SymEdgeIt SymEdgeIt;
1.213 + class EdgeIt : public Graph::EdgeIt {
1.214 public:
1.215 EdgeIt() { }
1.216 - EdgeIt(const typename GraphWrapper::EdgeIt& e) :
1.217 - GraphWrapper::EdgeIt(e) { }
1.218 - EdgeIt(const Invalid& i) : GraphWrapper::EdgeIt(i) { }
1.219 - EdgeIt(const GraphWrapperSkeleton<GraphWrapper>& _G) :
1.220 - GraphWrapper::EdgeIt(_G.gw) { }
1.221 + EdgeIt(const typename Graph::EdgeIt& e) : Graph::EdgeIt(e) { }
1.222 + EdgeIt(const Invalid& i) : Graph::EdgeIt(i) { }
1.223 + EdgeIt(const GraphWrapper<Graph>& _G) :
1.224 + Graph::EdgeIt(*(_G.graph)) { }
1.225 };
1.226 -
1.227 -
1.228 - //GraphWrapperSkeleton() : gw() { }
1.229 - GraphWrapperSkeleton(GraphWrapper _gw) : gw(_gw) { }
1.230 -
1.231 - //void setGraph(BaseGraph& _graph) { gw.setGraph(_graph); }
1.232 - //BaseGraph& getGraph() const { return gw.getGraph(); }
1.233 -
1.234 - template<typename I> I& first(I& i) const {
1.235 - i=I(*this);
1.236 +
1.237 + NodeIt& first(NodeIt& i) const {
1.238 + i=NodeIt(*this);
1.239 return i;
1.240 }
1.241 - template<typename I, typename P> I& first(I& i, const P& p) const {
1.242 - i=I(*this, p);
1.243 - return i;
1.244 + EdgeIt& first(EdgeIt& i) const {
1.245 + i=EdgeIt(*this);
1.246 + return i;
1.247 }
1.248 +// template<typename I> I& first(I& i) const {
1.249 +// i=I(*this);
1.250 +// return i;
1.251 +// }
1.252 + OutEdgeIt& first(OutEdgeIt& i, const Node& p) const {
1.253 + i=OutEdgeIt(*this, p);
1.254 + return i;
1.255 + }
1.256 + InEdgeIt& first(InEdgeIt& i, const Node& p) const {
1.257 + i=InEdgeIt(*this, p);
1.258 + return i;
1.259 + }
1.260 +// template<typename I, typename P> I& first(I& i, const P& p) const {
1.261 +// i=I(*this, p);
1.262 +// return i;
1.263 +// }
1.264
1.265 -// template<typename I> I getNext(const I& i) const { return gw.getNext(i); }
1.266 - template<typename I> I& next(I &i) const { gw.next(i); return i; }
1.267 +// template<typename I> I getNext(const I& i) const {
1.268 +// return gw.getNext(i); }
1.269 + template<typename I> I& next(I &i) const { graph->next(i); return i; }
1.270
1.271 template< typename It > It first() const {
1.272 It e; this->first(e); return e; }
1.273 @@ -245,45 +235,49 @@
1.274 template< typename It > It first(const Node& v) const {
1.275 It e; this->first(e, v); return e; }
1.276
1.277 - Node head(const Edge& e) const { return gw.head(e); }
1.278 - Node tail(const Edge& e) const { return gw.tail(e); }
1.279 + Node head(const Edge& e) const { return graph->head(e); }
1.280 + Node tail(const Edge& e) const { return graph->tail(e); }
1.281
1.282 - template<typename I> bool valid(const I& i) const { return gw.valid(i); }
1.283 + template<typename I> bool valid(const I& i) const {
1.284 + return graph->valid(i); }
1.285
1.286 //template<typename I> void setInvalid(const I &i);
1.287 //{ return graph->setInvalid(i); }
1.288
1.289 - int nodeNum() const { return gw.nodeNum(); }
1.290 - int edgeNum() const { return gw.edgeNum(); }
1.291 + int nodeNum() const { return graph->nodeNum(); }
1.292 + int edgeNum() const { return graph->edgeNum(); }
1.293
1.294 - template<typename I> Node aNode(const I& e) const { return gw.aNode(e); }
1.295 - template<typename I> Node bNode(const I& e) const { return gw.bNode(e); }
1.296 + template<typename I> Node aNode(const I& e) const {
1.297 + return graph->aNode(e); }
1.298 + template<typename I> Node bNode(const I& e) const {
1.299 + return graph->bNode(e); }
1.300
1.301 - Node addNode() const { return gw.addNode(); }
1.302 + Node addNode() const { return graph->addNode(); }
1.303 Edge addEdge(const Node& tail, const Node& head) const {
1.304 - return gw.addEdge(tail, head); }
1.305 + return graph->addEdge(tail, head); }
1.306
1.307 - template<typename I> void erase(const I& i) const { gw.erase(i); }
1.308 + template<typename I> void erase(const I& i) const { graph->erase(i); }
1.309
1.310 - void clear() const { gw.clear(); }
1.311 + void clear() const { graph->clear(); }
1.312
1.313 - template<typename T> class NodeMap : public GraphWrapper::NodeMap<T> {
1.314 + template<typename T> class NodeMap : public Graph::NodeMap<T> {
1.315 public:
1.316 - NodeMap(const GraphWrapperSkeleton<GraphWrapper>& _G) :
1.317 - GraphWrapper::NodeMap<T>(_G.gw) { }
1.318 - NodeMap(const GraphWrapperSkeleton<GraphWrapper>& _G, T a) :
1.319 - GraphWrapper::NodeMap<T>(_G.gw, a) { }
1.320 + NodeMap(const GraphWrapper<Graph>& _G) :
1.321 + Graph::NodeMap<T>(*(_G.graph)) { }
1.322 + NodeMap(const GraphWrapper<Graph>& _G, T a) :
1.323 + Graph::NodeMap<T>(*(_G.graph), a) { }
1.324 };
1.325
1.326 - template<typename T> class EdgeMap : public GraphWrapper::EdgeMap<T> {
1.327 + template<typename T> class EdgeMap : public Graph::EdgeMap<T> {
1.328 public:
1.329 - EdgeMap(const GraphWrapperSkeleton<GraphWrapper>& _G) :
1.330 - GraphWrapper::EdgeMap<T>(_G.gw) { }
1.331 - EdgeMap(const GraphWrapperSkeleton<GraphWrapper>& _G, T a) :
1.332 - GraphWrapper::EdgeMap<T>(_G.gw, a) { }
1.333 + EdgeMap(const GraphWrapper<Graph>& _G) :
1.334 + Graph::EdgeMap<T>(*(_G.graph)) { }
1.335 + EdgeMap(const GraphWrapper<Graph>& _G, T a) :
1.336 + Graph::EdgeMap<T>(*(_G.graph), a) { }
1.337 };
1.338 };
1.339
1.340 +
1.341 // template<typename Graph>
1.342 // class RevGraphWrapper
1.343 // {
1.344 @@ -291,7 +285,7 @@
1.345 // Graph* graph;
1.346
1.347 // public:
1.348 -// typedef Graph BaseGraph;
1.349 +// typedef Graph ParentGraph;
1.350
1.351 // typedef typename Graph::Node Node;
1.352 // typedef typename Graph::NodeIt NodeIt;
1.353 @@ -364,139 +358,59 @@
1.354 // };
1.355 // };
1.356
1.357 -// template<typename /*Graph*/GraphWrapper
1.358 -// /*=typename GraphWrapperSkeleton< TrivGraphWrapper<Graph>*/ >
1.359 -// class RevGraphWrapper :
1.360 -// public GraphWrapper/*GraphWrapperSkeleton< TrivGraphWrapper<Graph> >*/ {
1.361 -// protected:
1.362 -// //Graph* graph;
1.363 -
1.364 -// public:
1.365 -// //typedef Graph BaseGraph;
1.366
1.367 -// //typedef typename Graph::Node Node;
1.368 -// //typedef typename Graph::NodeIt NodeIt;
1.369 -
1.370 -// //typedef typename Graph::Edge Edge;
1.371 -// typedef typename GraphWrapper/*typename GraphWrapperSkeleton< TrivGraphWrapper<Graph> >*/::OutEdgeIt InEdgeIt;
1.372 -// typedef typename GraphWrapper/*typename GraphWrapperSkeleton< TrivGraphWrapper<Graph> >*/::InEdgeIt OutEdgeIt;
1.373 -// //typedef typename Graph::SymEdgeIt SymEdgeIt;
1.374 -// //typedef typename Graph::EdgeIt EdgeIt;
1.375 -
1.376 -// //RevGraphWrapper() : graph(0) { }
1.377 -// RevGraphWrapper(GraphWrapper _gw/*BaseGraph& _graph*/) : GraphWrapper/*GraphWrapperSkeleton< TrivGraphWrapper<Graph> >*/(_gw/*TrivGraphWrapper<Graph>(_graph)*/) { }
1.378 -
1.379 -// //void setGraph(Graph& _graph) { graph = &_graph; }
1.380 -// //Graph& getGraph() const { return (*graph); }
1.381 -
1.382 -// //template<typename I> I& first(I& i) const { return graph->first(i); }
1.383 -// //template<typename I, typename P> I& first(I& i, const P& p) const {
1.384 -// // return graph->first(i, p); }
1.385 -
1.386 -// //template<typename I> I getNext(const I& i) const {
1.387 -// // return graph->getNext(i); }
1.388 -// //template<typename I> I& next(I &i) const { return graph->next(i); }
1.389 -
1.390 -// //template< typename It > It first() const {
1.391 -// // It e; first(e); return e; }
1.392 -
1.393 -// //template< typename It > It first(const Node& v) const {
1.394 -// // It e; first(e, v); return e; }
1.395 -
1.396 -// //Node head(const Edge& e) const { return graph->tail(e); }
1.397 -// //Node tail(const Edge& e) const { return graph->head(e); }
1.398 -
1.399 -// //template<typename I> bool valid(const I& i) const
1.400 -// // { return graph->valid(i); }
1.401 -
1.402 -// //template<typename I> void setInvalid(const I &i);
1.403 -// //{ return graph->setInvalid(i); }
1.404 -
1.405 -// //template<typename I> Node aNode(const I& e) const {
1.406 -// // return graph->aNode(e); }
1.407 -// //template<typename I> Node bNode(const I& e) const {
1.408 -// // return graph->bNode(e); }
1.409 -
1.410 -// //Node addNode() const { return graph->addNode(); }
1.411 -// //Edge addEdge(const Node& tail, const Node& head) const {
1.412 -// // return graph->addEdge(tail, head); }
1.413 -
1.414 -// //int nodeNum() const { return graph->nodeNum(); }
1.415 -// //int edgeNum() const { return graph->edgeNum(); }
1.416 -
1.417 -// //template<typename I> void erase(const I& i) const { graph->erase(i); }
1.418 -
1.419 -// //void clear() const { graph->clear(); }
1.420 -
1.421 -// template<typename T> class NodeMap :
1.422 -// public GraphWrapper/*Skeleton< TrivGraphWrapper<Graph> >*/::NodeMap<T>
1.423 -// {
1.424 -// public:
1.425 -// NodeMap(const RevGraphWrapper<GraphWrapper>& _gw) :
1.426 -// GraphWrapper/*Skeleton< TrivGraphWrapper<Graph> >*/::NodeMap<T>(_gw) { }
1.427 -// NodeMap(const RevGraphWrapper<GraphWrapper>& _gw, T a) :
1.428 -// GraphWrapper/*Skeleton< TrivGraphWrapper<Graph> >*/::NodeMap<T>(_gw, a) { }
1.429 -// };
1.430 -
1.431 -// template<typename T> class EdgeMap :
1.432 -// public GraphWrapper/*Skeleton< TrivGraphWrapper<Graph> >*/::EdgeMap<T> {
1.433 -// public:
1.434 -// EdgeMap(const RevGraphWrapper<GraphWrapper>& _gw) :
1.435 -// GraphWrapper/*Skeleton< TrivGraphWrapper<Graph> >*/::EdgeMap<T>(_gw) { }
1.436 -// EdgeMap(const RevGraphWrapper<GraphWrapper>& _gw, T a) :
1.437 -// GraphWrapper/*Skeleton< TrivGraphWrapper<Graph> >*/::EdgeMap<T>(_gw, a) { }
1.438 -// };
1.439 -// };
1.440 -
1.441 - template<typename GraphWrapper>
1.442 - class RevGraphWrapper : public GraphWrapperSkeleton<GraphWrapper> {
1.443 + template<typename Graph>
1.444 + class RevGraphWrapper : public GraphWrapper<Graph> {
1.445 public:
1.446 - typedef typename GraphWrapperSkeleton<GraphWrapper>::Node Node;
1.447 - typedef typename GraphWrapperSkeleton<GraphWrapper>::Edge Edge;
1.448 + typedef typename GraphWrapper<Graph>::Node Node;
1.449 + typedef typename GraphWrapper<Graph>::Edge Edge;
1.450 //FIXME
1.451 - //If GraphWrapper::OutEdgeIt is not defined
1.452 + //If Graph::OutEdgeIt is not defined
1.453 //and we do not want to use RevGraphWrapper::InEdgeIt,
1.454 //this won't work, because of typedef
1.455 //OR
1.456 //graphs have to define their non-existing iterators to void
1.457 //Unfortunately all the typedefs are instantiated in templates,
1.458 //unlike other stuff
1.459 - typedef typename GraphWrapperSkeleton<GraphWrapper>::OutEdgeIt InEdgeIt;
1.460 - typedef typename GraphWrapperSkeleton<GraphWrapper>::InEdgeIt OutEdgeIt;
1.461 + typedef typename GraphWrapper<Graph>::OutEdgeIt InEdgeIt;
1.462 + typedef typename GraphWrapper<Graph>::InEdgeIt OutEdgeIt;
1.463
1.464 - RevGraphWrapper(GraphWrapper _gw) :
1.465 - GraphWrapperSkeleton<GraphWrapper>(_gw) { }
1.466 +// RevGraphWrapper() : GraphWrapper<Graph>() { }
1.467 + RevGraphWrapper(Graph& _graph) : GraphWrapper<Graph>(_graph) { }
1.468
1.469 Node head(const Edge& e) const
1.470 - { return GraphWrapperSkeleton<GraphWrapper>::tail(e); }
1.471 + { return GraphWrapper<Graph>::tail(e); }
1.472 Node tail(const Edge& e) const
1.473 - { return GraphWrapperSkeleton<GraphWrapper>::head(e); }
1.474 + { return GraphWrapper<Graph>::head(e); }
1.475 };
1.476
1.477 //Subgraph on the same node-set and partial edge-set
1.478 - template<typename GraphWrapper, typename EdgeFilterMap>
1.479 - class SubGraphWrapper : public GraphWrapperSkeleton<GraphWrapper> {
1.480 + template<typename Graph, typename EdgeFilterMap>
1.481 + class SubGraphWrapper : public GraphWrapper<Graph> {
1.482 protected:
1.483 EdgeFilterMap* filter_map;
1.484 public:
1.485 - typedef typename GraphWrapperSkeleton<GraphWrapper>::Node Node;
1.486 - typedef typename GraphWrapperSkeleton<GraphWrapper>::NodeIt NodeIt;
1.487 - typedef typename GraphWrapperSkeleton<GraphWrapper>::Edge Edge;
1.488 - typedef typename GraphWrapperSkeleton<GraphWrapper>::EdgeIt EdgeIt;
1.489 - typedef typename GraphWrapperSkeleton<GraphWrapper>::InEdgeIt InEdgeIt;
1.490 - typedef typename GraphWrapperSkeleton<GraphWrapper>::OutEdgeIt OutEdgeIt;
1.491 + typedef typename GraphWrapper<Graph>::Node Node;
1.492 + typedef typename GraphWrapper<Graph>::NodeIt NodeIt;
1.493 + typedef typename GraphWrapper<Graph>::Edge Edge;
1.494 + typedef typename GraphWrapper<Graph>::EdgeIt EdgeIt;
1.495 + typedef typename GraphWrapper<Graph>::InEdgeIt InEdgeIt;
1.496 + typedef typename GraphWrapper<Graph>::OutEdgeIt OutEdgeIt;
1.497
1.498 - SubGraphWrapper(GraphWrapper _gw, EdgeFilterMap& _filter_map) :
1.499 - GraphWrapperSkeleton<GraphWrapper>(_gw), filter_map(&_filter_map) { }
1.500 +// SubGraphWrapper() : GraphWrapper<Graph>(), filter_map(0) { }
1.501 + SubGraphWrapper(Graph& _graph, EdgeFilterMap& _filter_map) :
1.502 + GraphWrapper<Graph>(_graph), filter_map(&_filter_map) { }
1.503
1.504 template<typename I> I& first(I& i) const {
1.505 - gw.first(i);
1.506 - while (gw.valid(i) && !filter_map->get(i)) { gw.next(i); }
1.507 + graph->first(i);
1.508 + //while (graph->valid(i) && !filter_map->get(i)) { graph->next(i); }
1.509 + while (graph->valid(i) && !(*filter_map)[i]) { graph->next(i); }
1.510 return i;
1.511 }
1.512 template<typename I, typename P> I& first(I& i, const P& p) const {
1.513 - gw.first(i, p);
1.514 - while (gw.valid(i) && !filter_map->get(i)) { gw.next(i); }
1.515 + graph->first(i, p);
1.516 +// while (graph->valid(i) && !filter_map->get(i)) { graph->next(i); }
1.517 + while (graph->valid(i) && !(*filter_map)[i]) { graph->next(i); }
1.518 return i;
1.519 }
1.520
1.521 @@ -504,8 +418,9 @@
1.522 // return gw.getNext(i);
1.523 //}
1.524 template<typename I> I& next(I &i) const {
1.525 - gw.next(i);
1.526 - while (gw.valid(i) && !filter_map->get(i)) { gw.next(i); }
1.527 + graph->next(i);
1.528 +// while (graph->valid(i) && !filter_map-get(i)) { graph->next(i); }
1.529 + while (graph->valid(i) && !(*filter_map)[i]) { graph->next(i); }
1.530 return i;
1.531 }
1.532
1.533 @@ -523,7 +438,7 @@
1.534 // GraphWrapper gw;
1.535
1.536 // public:
1.537 -// typedef GraphWrapper BaseGraph;
1.538 +// typedef GraphWrapper ParentGraph;
1.539
1.540 // typedef typename GraphWrapper::Node Node;
1.541 // typedef typename GraphWrapper::NodeIt NodeIt;
1.542 @@ -676,39 +591,21 @@
1.543 // };
1.544
1.545
1.546 - template<typename GraphWrapper>
1.547 - class UndirGraphWrapper : public GraphWrapperSkeleton<GraphWrapper> {
1.548 + template<typename Graph>
1.549 + class UndirGraphWrapper : public GraphWrapper<Graph> {
1.550 protected:
1.551 -// GraphWrapper gw;
1.552 + typedef typename Graph::Edge GraphEdge;
1.553 + typedef typename Graph::OutEdgeIt GraphOutEdgeIt;
1.554 + typedef typename Graph::InEdgeIt GraphInEdgeIt;
1.555 + public:
1.556 + typedef typename GraphWrapper<Graph>::Node Node;
1.557 + typedef typename GraphWrapper<Graph>::NodeIt NodeIt;
1.558
1.559 - public:
1.560 - //typedef GraphWrapper BaseGraph;
1.561 +// UndirGraphWrapper() : GraphWrapper<Graph>() { }
1.562 + UndirGraphWrapper(Graph& _graph) : GraphWrapper<Graph>(_graph) { }
1.563
1.564 - typedef typename GraphWrapperSkeleton<GraphWrapper>::Node Node;
1.565 - typedef typename GraphWrapperSkeleton<GraphWrapper>::NodeIt NodeIt;
1.566 -
1.567 - //private:
1.568 - //FIXME ezeknek valojaban a GraphWrapper megfelelo dolgai kellene hogy
1.569 - //legyenek, at kell irni
1.570 - typedef typename /*GraphWrapperSkeleton<GraphWrapper>*/
1.571 - GraphWrapper::Edge GraphEdge;
1.572 - typedef typename /*GraphWrapperSkeleton<GraphWrapper>*/
1.573 - GraphWrapper::OutEdgeIt GraphOutEdgeIt;
1.574 - typedef typename /*GraphWrapperSkeleton<GraphWrapper>*/
1.575 - GraphWrapper::InEdgeIt GraphInEdgeIt;
1.576 - //public:
1.577 -
1.578 - //UndirGraphWrapper() : graph(0) { }
1.579 - UndirGraphWrapper(GraphWrapper _gw) :
1.580 - GraphWrapperSkeleton<GraphWrapper>(_gw) { }
1.581 -
1.582 - //UndirGraphWrapper(GraphWrapper _gw) : gw(_gw) { }
1.583 -
1.584 - //void setGraph(Graph& _graph) { graph = &_graph; }
1.585 - //Graph& getGraph() const { return (*graph); }
1.586 -
1.587 class Edge {
1.588 - friend class UndirGraphWrapper<GraphWrapper>;
1.589 + friend class UndirGraphWrapper<Graph>;
1.590 protected:
1.591 bool out_or_in; //true iff out
1.592 GraphOutEdgeIt out;
1.593 @@ -741,42 +638,42 @@
1.594 };
1.595
1.596 class OutEdgeIt : public Edge {
1.597 - friend class UndirGraphWrapper<GraphWrapper>;
1.598 + friend class UndirGraphWrapper<Graph>;
1.599 public:
1.600 OutEdgeIt() : Edge() { }
1.601 OutEdgeIt(const Invalid& i) : Edge(i) { }
1.602 - OutEdgeIt(const UndirGraphWrapper<GraphWrapper>& _G, const Node& n)
1.603 + OutEdgeIt(const UndirGraphWrapper<Graph>& _G, const Node& n)
1.604 : Edge() {
1.605 - out_or_in=true; _G.gw.first(out, n);
1.606 - if (!(_G.gw.valid(out))) { out_or_in=false; _G.gw.first(in, n); }
1.607 + out_or_in=true; _G.graph->first(out, n);
1.608 + if (!(_G.graph->valid(out))) { out_or_in=false; _G.graph->first(in, n); }
1.609 }
1.610 };
1.611
1.612 typedef OutEdgeIt InEdgeIt;
1.613
1.614 class EdgeIt : public Edge {
1.615 - friend class UndirGraphWrapper<GraphWrapper>;
1.616 + friend class UndirGraphWrapper<Graph>;
1.617 protected:
1.618 NodeIt v;
1.619 public:
1.620 EdgeIt() : Edge() { }
1.621 EdgeIt(const Invalid& i) : Edge(i) { }
1.622 - EdgeIt(const UndirGraphWrapper<GraphWrapper>& _G)
1.623 + EdgeIt(const UndirGraphWrapper<Graph>& _G)
1.624 : Edge() {
1.625 out_or_in=true;
1.626 //Node v;
1.627 _G.first(v);
1.628 - if (_G.valid(v)) _G.gw.first(out); else out=INVALID;
1.629 - while (_G.valid(v) && !_G.gw.valid(out)) {
1.630 - _G.gw.next(v);
1.631 - if (_G.valid(v)) _G.gw.first(out);
1.632 + if (_G.valid(v)) _G.graph->first(out); else out=INVALID;
1.633 + while (_G.valid(v) && !_G.graph->valid(out)) {
1.634 + _G.graph->next(v);
1.635 + if (_G.valid(v)) _G.graph->first(out);
1.636 }
1.637 }
1.638 };
1.639
1.640 OutEdgeIt& first(OutEdgeIt& e, const Node& n) const {
1.641 - e.out_or_in=true; gw.first(e.out, n);
1.642 - if (!(gw.valid(e.out))) { e.out_or_in=false; gw.first(e.in, n); }
1.643 + e.out_or_in=true; graph->first(e.out, n);
1.644 + if (!(graph->valid(e.out))) { e.out_or_in=false; graph->first(e.in, n); }
1.645 return e;
1.646 }
1.647
1.648 @@ -784,47 +681,47 @@
1.649 e.out_or_in=true;
1.650 //NodeIt v;
1.651 first(e.v);
1.652 - if (valid(e.v)) gw.first(e.out, e.v); else e.out=INVALID;
1.653 - while (valid(e.v) && !gw.valid(e.out)) {
1.654 - gw.next(e.v);
1.655 - if (valid(e.v)) gw.first(e.out, e.v);
1.656 + if (valid(e.v)) graph->first(e.out, e.v); else e.out=INVALID;
1.657 + while (valid(e.v) && !graph->valid(e.out)) {
1.658 + graph->next(e.v);
1.659 + if (valid(e.v)) graph->first(e.out, e.v);
1.660 }
1.661 return e;
1.662 }
1.663
1.664 - template<typename I> I& first(I& i) const { gw.first(i); return i; }
1.665 + template<typename I> I& first(I& i) const { graph->first(i); return i; }
1.666 template<typename I, typename P> I& first(I& i, const P& p) const {
1.667 - gw.first(i, p); return i; }
1.668 + graph->first(i, p); return i; }
1.669
1.670 OutEdgeIt& next(OutEdgeIt& e) const {
1.671 if (e.out_or_in) {
1.672 - Node n=gw.tail(e.out);
1.673 - gw.next(e.out);
1.674 - if (!gw.valid(e.out)) { e.out_or_in=false; gw.first(e.in, n); }
1.675 + Node n=graph->tail(e.out);
1.676 + graph->next(e.out);
1.677 + if (!graph->valid(e.out)) { e.out_or_in=false; graph->first(e.in, n); }
1.678 } else {
1.679 - gw.next(e.in);
1.680 + graph->next(e.in);
1.681 }
1.682 return e;
1.683 }
1.684
1.685 EdgeIt& next(EdgeIt& e) const {
1.686 //NodeIt v=tail(e);
1.687 - gw.next(e.out);
1.688 - while (valid(e.v) && !gw.valid(e.out)) {
1.689 + graph->next(e.out);
1.690 + while (valid(e.v) && !graph->valid(e.out)) {
1.691 next(e.v);
1.692 - if (valid(e.v)) gw.first(e.out, e.v);
1.693 + if (valid(e.v)) graph->first(e.out, e.v);
1.694 }
1.695 return e;
1.696 }
1.697
1.698 - template<typename I> I& next(I &i) const { return gw.next(i); }
1.699 + template<typename I> I& next(I &i) const { return graph->next(i); }
1.700 // template<typename I> I getNext(const I& i) const { return gw.getNext(i); }
1.701
1.702 template< typename It > It first() const {
1.703 - It e; first(e); return e; }
1.704 + It e; this->first(e); return e; }
1.705
1.706 template< typename It > It first(const Node& v) const {
1.707 - It e; first(e, v); return e; }
1.708 + It e; this->first(e, v); return e; }
1.709
1.710 // Node head(const Edge& e) const { return gw.head(e); }
1.711 // Node tail(const Edge& e) const { return gw.tail(e); }
1.712 @@ -841,9 +738,9 @@
1.713 // return graph->bNode(e); }
1.714
1.715 Node aNode(const OutEdgeIt& e) const {
1.716 - if (e.out_or_in) return gw.tail(e); else return gw.head(e); }
1.717 + if (e.out_or_in) return graph->tail(e); else return graph->head(e); }
1.718 Node bNode(const OutEdgeIt& e) const {
1.719 - if (e.out_or_in) return gw.head(e); else return gw.tail(e); }
1.720 + if (e.out_or_in) return graph->head(e); else return graph->tail(e); }
1.721
1.722 // Node addNode() const { return gw.addNode(); }
1.723
1.724 @@ -855,21 +752,21 @@
1.725
1.726 // void clear() const { gw.clear(); }
1.727
1.728 -// template<typename T> class NodeMap : public GraphWrapper::NodeMap<T> {
1.729 +// template<typename T> class NodeMap : public Graph::NodeMap<T> {
1.730 // public:
1.731 -// NodeMap(const UndirGraphWrapper<GraphWrapper>& _G) :
1.732 -// GraphWrapper::NodeMap<T>(_G.gw) { }
1.733 -// NodeMap(const UndirGraphWrapper<GraphWrapper>& _G, T a) :
1.734 -// GraphWrapper::NodeMap<T>(_G.gw, a) { }
1.735 +// NodeMap(const UndirGraphWrapper<Graph>& _G) :
1.736 +// Graph::NodeMap<T>(_G.gw) { }
1.737 +// NodeMap(const UndirGraphWrapper<Graph>& _G, T a) :
1.738 +// Graph::NodeMap<T>(_G.gw, a) { }
1.739 // };
1.740
1.741 // template<typename T> class EdgeMap :
1.742 -// public GraphWrapperSkeleton<GraphWrapper>::EdgeMap<T> {
1.743 +// public GraphWrapperSkeleton<Graph>::EdgeMap<T> {
1.744 // public:
1.745 -// EdgeMap(const UndirGraphWrapper<GraphWrapper>& _G) :
1.746 -// GraphWrapperSkeleton<GraphWrapper>::EdgeMap<T>(_G.gw) { }
1.747 -// EdgeMap(const UndirGraphWrapper<GraphWrapper>& _G, T a) :
1.748 -// GraphWrapper::EdgeMap<T>(_G.gw, a) { }
1.749 +// EdgeMap(const UndirGraphWrapper<Graph>& _G) :
1.750 +// GraphWrapperSkeleton<Graph>::EdgeMap<T>(_G.gw) { }
1.751 +// EdgeMap(const UndirGraphWrapper<Graph>& _G, T a) :
1.752 +// Graph::EdgeMap<T>(_G.gw, a) { }
1.753 // };
1.754 };
1.755
1.756 @@ -883,7 +780,7 @@
1.757 // Graph* graph;
1.758
1.759 // public:
1.760 -// typedef Graph BaseGraph;
1.761 +// typedef Graph ParentGraph;
1.762
1.763 // typedef typename Graph::Node Node;
1.764 // typedef typename Graph::Edge Edge;
1.765 @@ -946,32 +843,22 @@
1.766 // };
1.767
1.768
1.769 - template<typename GraphWrapper, typename Number, typename FlowMap, typename CapacityMap>
1.770 - class ResGraphWrapper : public GraphWrapperSkeleton<GraphWrapper>{
1.771 + template<typename Graph, typename Number, typename FlowMap, typename CapacityMap>
1.772 + class ResGraphWrapper : public GraphWrapper<Graph>{
1.773 public:
1.774 - //typedef Graph BaseGraph;
1.775 - //typedef TrivGraphWrapper<const Graph> GraphWrapper;
1.776 - typedef typename GraphWrapperSkeleton<GraphWrapper>::Node Node;
1.777 - typedef typename GraphWrapperSkeleton<GraphWrapper>::NodeIt NodeIt;
1.778 - private:
1.779 - typedef typename /*GraphWrapperSkeleton<GraphWrapper>*/
1.780 - GraphWrapper::OutEdgeIt OldOutEdgeIt;
1.781 - typedef typename /*GraphWrapperSkeleton<GraphWrapper>*/
1.782 - GraphWrapper::InEdgeIt OldInEdgeIt;
1.783 + typedef typename GraphWrapper<Graph>::Node Node;
1.784 + typedef typename GraphWrapper<Graph>::NodeIt NodeIt;
1.785 protected:
1.786 - //const Graph* graph;
1.787 - //GraphWrapper gw;
1.788 + typedef typename Graph::OutEdgeIt GraphOutEdgeIt;
1.789 + typedef typename Graph::InEdgeIt GraphInEdgeIt;
1.790 + typedef typename Graph::Edge GraphEdge;
1.791 FlowMap* flow;
1.792 const CapacityMap* capacity;
1.793 public:
1.794
1.795 - ResGraphWrapper(const GraphWrapper& _gw, FlowMap& _flow,
1.796 + ResGraphWrapper(Graph& _graph, FlowMap& _flow,
1.797 const CapacityMap& _capacity) :
1.798 - GraphWrapperSkeleton<GraphWrapper>(_gw),
1.799 - flow(&_flow), capacity(&_capacity) { }
1.800 -
1.801 - //void setGraph(const Graph& _graph) { graph = &_graph; }
1.802 - //const Graph& getGraph() const { return (*graph); }
1.803 + GraphWrapper<Graph>(_graph), flow(&_flow), capacity(&_capacity) { }
1.804
1.805 class Edge;
1.806 class OutEdgeIt;
1.807 @@ -979,11 +866,11 @@
1.808 friend class OutEdgeIt;
1.809
1.810 class Edge {
1.811 - friend class ResGraphWrapper<GraphWrapper, Number, FlowMap, CapacityMap>;
1.812 + friend class ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>;
1.813 protected:
1.814 bool out_or_in; //true, iff out
1.815 - OldOutEdgeIt out;
1.816 - OldInEdgeIt in;
1.817 + GraphOutEdgeIt out;
1.818 + GraphInEdgeIt in;
1.819 public:
1.820 Edge() : out_or_in(true) { }
1.821 Edge(const Invalid& i) : out_or_in(false), out(), in(i) { }
1.822 @@ -1001,24 +888,27 @@
1.823 else
1.824 return (u.out_or_in || u.in!=v.in);
1.825 }
1.826 + operator GraphEdge() const {
1.827 + if (out_or_in) return(out); else return(in);
1.828 + }
1.829 };
1.830
1.831
1.832 class OutEdgeIt : public Edge {
1.833 - friend class ResGraphWrapper<GraphWrapper, Number, FlowMap, CapacityMap>;
1.834 + friend class ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>;
1.835 public:
1.836 OutEdgeIt() { }
1.837 //FIXME
1.838 OutEdgeIt(const Edge& e) : Edge(e) { }
1.839 OutEdgeIt(const Invalid& i) : Edge(i) { }
1.840 protected:
1.841 - OutEdgeIt(const ResGraphWrapper<GraphWrapper, Number, FlowMap, CapacityMap>& resG, Node v) : Edge() {
1.842 - resG.gw.first(out, v);
1.843 - while( resG.gw.valid(out) && !(resG.resCap(out)>0) ) { resG.gw.next(out); }
1.844 - if (!resG.gw.valid(out)) {
1.845 + OutEdgeIt(const ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>& resG, Node v) : Edge() {
1.846 + resG.graph->first(out, v);
1.847 + while( resG.graph->valid(out) && !(resG.resCap(out)>0) ) { resG.graph->next(out); }
1.848 + if (!resG.graph->valid(out)) {
1.849 out_or_in=0;
1.850 - resG.gw.first(in, v);
1.851 - while( resG.gw.valid(in) && !(resG.resCap(in)>0) ) { resG.gw.next(in); }
1.852 + resG.graph->first(in, v);
1.853 + while( resG.graph->valid(in) && !(resG.resCap(in)>0) ) { resG.graph->next(in); }
1.854 }
1.855 }
1.856 // public:
1.857 @@ -1044,30 +934,30 @@
1.858 typedef void InEdgeIt;
1.859
1.860 class EdgeIt : public Edge {
1.861 - friend class ResGraphWrapper<GraphWrapper, Number, FlowMap, CapacityMap>;
1.862 + friend class ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>;
1.863 NodeIt v;
1.864 public:
1.865 EdgeIt() { }
1.866 //EdgeIt(const EdgeIt& e) : Edge(e), v(e.v) { }
1.867 EdgeIt(const Invalid& i) : Edge(i) { }
1.868 - EdgeIt(const ResGraphWrapper<GraphWrapper, Number, FlowMap, CapacityMap>& resG) : Edge() {
1.869 - resG.gw.first(v);
1.870 - if (resG.gw.valid(v)) resG.gw.first(out, v); else out=INVALID;
1.871 - while (resG.gw.valid(out) && !(resG.resCap(out)>0) ) { resG.gw.next(out); }
1.872 - while (resG.gw.valid(v) && !resG.gw.valid(out)) {
1.873 - resG.gw.next(v);
1.874 - if (resG.gw.valid(v)) resG.gw.first(out, v);
1.875 - while (resG.gw.valid(out) && !(resG.resCap(out)>0) ) { resG.gw.next(out); }
1.876 + EdgeIt(const ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>& resG) : Edge() {
1.877 + resG.graph->first(v);
1.878 + if (resG.graph->valid(v)) resG.graph->first(out, v); else out=INVALID;
1.879 + while (resG.graph->valid(out) && !(resG.resCap(out)>0) ) { resG.graph->next(out); }
1.880 + while (resG.graph->valid(v) && !resG.graph->valid(out)) {
1.881 + resG.graph->next(v);
1.882 + if (resG.graph->valid(v)) resG.graph->first(out, v);
1.883 + while (resG.graph->valid(out) && !(resG.resCap(out)>0) ) { resG.graph->next(out); }
1.884 }
1.885 - if (!resG.gw.valid(out)) {
1.886 + if (!resG.graph->valid(out)) {
1.887 out_or_in=0;
1.888 - resG.gw.first(v);
1.889 - if (resG.gw.valid(v)) resG.gw.first(in, v); else in=INVALID;
1.890 - while (resG.gw.valid(in) && !(resG.resCap(in)>0) ) { resG.gw.next(in); }
1.891 - while (resG.gw.valid(v) && !resG.gw.valid(in)) {
1.892 - resG.gw.next(v);
1.893 - if (resG.gw.valid(v)) resG.gw.first(in, v);
1.894 - while (resG.gw.valid(in) && !(resG.resCap(in)>0) ) { resG.gw.next(in); }
1.895 + resG.graph->first(v);
1.896 + if (resG.graph->valid(v)) resG.graph->first(in, v); else in=INVALID;
1.897 + while (resG.graph->valid(in) && !(resG.resCap(in)>0) ) { resG.graph->next(in); }
1.898 + while (resG.graph->valid(v) && !resG.graph->valid(in)) {
1.899 + resG.graph->next(v);
1.900 + if (resG.graph->valid(v)) resG.graph->first(in, v);
1.901 + while (resG.graph->valid(in) && !(resG.resCap(in)>0) ) { resG.graph->next(in); }
1.902 }
1.903 }
1.904 }
1.905 @@ -1083,7 +973,7 @@
1.906 // if (!out.valid()) {
1.907 // out_or_in=0;
1.908 // G->first(v);
1.909 -// if (v.valid()) G->first(in, v); else in=OldInEdgeIt();
1.910 +// if (v.valid()) G->first(in, v); else in=GraphInEdgeIt();
1.911 // while (in.valid() && !(Edge::resCap()>0) ) { ++in; }
1.912 // while (v.valid() && !in.valid()) {
1.913 // ++v;
1.914 @@ -1104,7 +994,7 @@
1.915 // }
1.916 };
1.917
1.918 - NodeIt& first(NodeIt& v) const { gw.first(v); return v; }
1.919 + NodeIt& first(NodeIt& v) const { graph->first(v); return v; }
1.920 OutEdgeIt& first(OutEdgeIt& e, Node v) const {
1.921 e=OutEdgeIt(*this, v);
1.922 return e;
1.923 @@ -1114,52 +1004,52 @@
1.924 return e;
1.925 }
1.926
1.927 - NodeIt& next(NodeIt& n) const { return gw.next(n); }
1.928 + NodeIt& next(NodeIt& n) const { return graph->next(n); }
1.929
1.930 OutEdgeIt& next(OutEdgeIt& e) const {
1.931 if (e.out_or_in) {
1.932 - Node v=gw.aNode(e.out);
1.933 - gw.next(e.out);
1.934 - while( gw.valid(e.out) && !(resCap(e.out)>0) ) { gw.next(e.out); }
1.935 - if (!gw.valid(e.out)) {
1.936 + Node v=graph->aNode(e.out);
1.937 + graph->next(e.out);
1.938 + while( graph->valid(e.out) && !(resCap(e.out)>0) ) { graph->next(e.out); }
1.939 + if (!graph->valid(e.out)) {
1.940 e.out_or_in=0;
1.941 - gw.first(e.in, v);
1.942 - while( gw.valid(e.in) && !(resCap(e.in)>0) ) { gw.next(e.in); }
1.943 + graph->first(e.in, v);
1.944 + while( graph->valid(e.in) && !(resCap(e.in)>0) ) { graph->next(e.in); }
1.945 }
1.946 } else {
1.947 - gw.next(e.in);
1.948 - while( gw.valid(e.in) && !(resCap(e.in)>0) ) { gw.next(e.in); }
1.949 + graph->next(e.in);
1.950 + while( graph->valid(e.in) && !(resCap(e.in)>0) ) { graph->next(e.in); }
1.951 }
1.952 return e;
1.953 }
1.954
1.955 EdgeIt& next(EdgeIt& e) const {
1.956 if (e.out_or_in) {
1.957 - gw.next(e.out);
1.958 - while (gw.valid(e.out) && !(resCap(e.out)>0) ) { gw.next(e.out); }
1.959 - while (gw.valid(e.v) && !gw.valid(e.out)) {
1.960 - gw.next(e.v);
1.961 - if (gw.valid(e.v)) gw.first(e.out, e.v);
1.962 - while (gw.valid(e.out) && !(resCap(e.out)>0) ) { gw.next(e.out); }
1.963 + graph->next(e.out);
1.964 + while (graph->valid(e.out) && !(resCap(e.out)>0) ) { graph->next(e.out); }
1.965 + while (graph->valid(e.v) && !graph->valid(e.out)) {
1.966 + graph->next(e.v);
1.967 + if (graph->valid(e.v)) graph->first(e.out, e.v);
1.968 + while (graph->valid(e.out) && !(resCap(e.out)>0) ) { graph->next(e.out); }
1.969 }
1.970 - if (!gw.valid(e.out)) {
1.971 + if (!graph->valid(e.out)) {
1.972 e.out_or_in=0;
1.973 - gw.first(e.v);
1.974 - if (gw.valid(e.v)) gw.first(e.in, e.v); else e.in=INVALID;
1.975 - while (gw.valid(e.in) && !(resCap(e.in)>0) ) { gw.next(e.in); }
1.976 - while (gw.valid(e.v) && !gw.valid(e.in)) {
1.977 - gw.next(e.v);
1.978 - if (gw.valid(e.v)) gw.first(e.in, e.v);
1.979 - while (gw.valid(e.in) && !(resCap(e.in)>0) ) { gw.next(e.in); }
1.980 + graph->first(e.v);
1.981 + if (graph->valid(e.v)) graph->first(e.in, e.v); else e.in=INVALID;
1.982 + while (graph->valid(e.in) && !(resCap(e.in)>0) ) { graph->next(e.in); }
1.983 + while (graph->valid(e.v) && !graph->valid(e.in)) {
1.984 + graph->next(e.v);
1.985 + if (graph->valid(e.v)) graph->first(e.in, e.v);
1.986 + while (graph->valid(e.in) && !(resCap(e.in)>0) ) { graph->next(e.in); }
1.987 }
1.988 }
1.989 } else {
1.990 - gw.next(e.in);
1.991 - while (gw.valid(e.in) && !(resCap(e.in)>0) ) { gw.next(e.in); }
1.992 - while (gw.valid(e.v) && !gw.valid(e.in)) {
1.993 - gw.next(e.v);
1.994 - if (gw.valid(e.v)) gw.first(e.in, e.v);
1.995 - while (gw.valid(e.in) && !(resCap(e.in)>0) ) { gw.next(e.in); }
1.996 + graph->next(e.in);
1.997 + while (graph->valid(e.in) && !(resCap(e.in)>0) ) { graph->next(e.in); }
1.998 + while (graph->valid(e.v) && !graph->valid(e.in)) {
1.999 + graph->next(e.v);
1.1000 + if (graph->valid(e.v)) graph->first(e.in, e.v);
1.1001 + while (graph->valid(e.in) && !(resCap(e.in)>0) ) { graph->next(e.in); }
1.1002 }
1.1003 }
1.1004 return e;
1.1005 @@ -1181,54 +1071,60 @@
1.1006 }
1.1007
1.1008 Node tail(Edge e) const {
1.1009 - return ((e.out_or_in) ? gw.aNode(e.out) : gw.aNode(e.in)); }
1.1010 + return ((e.out_or_in) ? graph->aNode(e.out) : graph->aNode(e.in)); }
1.1011 Node head(Edge e) const {
1.1012 - return ((e.out_or_in) ? gw.bNode(e.out) : gw.bNode(e.in)); }
1.1013 + return ((e.out_or_in) ? graph->bNode(e.out) : graph->bNode(e.in)); }
1.1014
1.1015 Node aNode(OutEdgeIt e) const {
1.1016 - return ((e.out_or_in) ? gw.aNode(e.out) : gw.aNode(e.in)); }
1.1017 + return ((e.out_or_in) ? graph->aNode(e.out) : graph->aNode(e.in)); }
1.1018 Node bNode(OutEdgeIt e) const {
1.1019 - return ((e.out_or_in) ? gw.bNode(e.out) : gw.bNode(e.in)); }
1.1020 + return ((e.out_or_in) ? graph->bNode(e.out) : graph->bNode(e.in)); }
1.1021
1.1022 - int nodeNum() const { return gw.nodeNum(); }
1.1023 + int nodeNum() const { return graph->nodeNum(); }
1.1024 //FIXME
1.1025 - //int edgeNum() const { return gw.edgeNum(); }
1.1026 + //int edgeNum() const { return graph->edgeNum(); }
1.1027
1.1028
1.1029 - int id(Node v) const { return gw.id(v); }
1.1030 + int id(Node v) const { return graph->id(v); }
1.1031
1.1032 - bool valid(Node n) const { return gw.valid(n); }
1.1033 + bool valid(Node n) const { return graph->valid(n); }
1.1034 bool valid(Edge e) const {
1.1035 - return e.out_or_in ? gw.valid(e.out) : gw.valid(e.in); }
1.1036 + return e.out_or_in ? graph->valid(e.out) : graph->valid(e.in); }
1.1037
1.1038 void augment(const Edge& e, Number a) const {
1.1039 if (e.out_or_in)
1.1040 - flow->set(e.out, flow->get(e.out)+a);
1.1041 +// flow->set(e.out, flow->get(e.out)+a);
1.1042 + flow->set(e.out, (*flow)[e.out]+a);
1.1043 else
1.1044 - flow->set(e.in, flow->get(e.in)-a);
1.1045 +// flow->set(e.in, flow->get(e.in)-a);
1.1046 + flow->set(e.in, (*flow)[e.in]-a);
1.1047 }
1.1048
1.1049 Number resCap(const Edge& e) const {
1.1050 if (e.out_or_in)
1.1051 - return (capacity->get(e.out)-flow->get(e.out));
1.1052 +// return (capacity->get(e.out)-flow->get(e.out));
1.1053 + return ((*capacity)[e.out]-(*flow)[e.out]);
1.1054 else
1.1055 - return (flow->get(e.in));
1.1056 +// return (flow->get(e.in));
1.1057 + return ((*flow)[e.in]);
1.1058 }
1.1059
1.1060 - Number resCap(OldOutEdgeIt out) const {
1.1061 - return (capacity->get(out)-flow->get(out));
1.1062 + Number resCap(GraphOutEdgeIt out) const {
1.1063 +// return (capacity->get(out)-flow->get(out));
1.1064 + return ((*capacity)[out]-(*flow)[out]);
1.1065 }
1.1066
1.1067 - Number resCap(OldInEdgeIt in) const {
1.1068 - return (flow->get(in));
1.1069 + Number resCap(GraphInEdgeIt in) const {
1.1070 +// return (flow->get(in));
1.1071 + return ((*flow)[in]);
1.1072 }
1.1073
1.1074 -// template<typename T> class NodeMap : public GraphWrapper::NodeMap<T> {
1.1075 +// template<typename T> class NodeMap : public Graph::NodeMap<T> {
1.1076 // public:
1.1077 -// NodeMap(const ResGraphWrapper<GraphWrapper, Number, FlowMap, CapacityMap>& _G)
1.1078 -// : GraphWrapper::NodeMap<T>(_G.gw) { }
1.1079 -// NodeMap(const ResGraphWrapper<GraphWrapper, Number, FlowMap, CapacityMap>& _G,
1.1080 -// T a) : GraphWrapper::NodeMap<T>(_G.gw, a) { }
1.1081 +// NodeMap(const ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>& _G)
1.1082 +// : Graph::NodeMap<T>(_G.gw) { }
1.1083 +// NodeMap(const ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>& _G,
1.1084 +// T a) : Graph::NodeMap<T>(_G.gw, a) { }
1.1085 // };
1.1086
1.1087 // template <typename T>
1.1088 @@ -1243,53 +1139,59 @@
1.1089
1.1090 template <typename T>
1.1091 class EdgeMap {
1.1092 - typename GraphWrapper::EdgeMap<T> forward_map, backward_map;
1.1093 + typename Graph::EdgeMap<T> forward_map, backward_map;
1.1094 public:
1.1095 - EdgeMap(const ResGraphWrapper<GraphWrapper, Number, FlowMap, CapacityMap>& _G) : forward_map(_G.gw), backward_map(_G.gw) { }
1.1096 - EdgeMap(const ResGraphWrapper<GraphWrapper, Number, FlowMap, CapacityMap>& _G, T a) : forward_map(_G.gw, a), backward_map(_G.gw, a) { }
1.1097 + EdgeMap(const ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>& _G) : forward_map(*(_G.graph)), backward_map(*(_G.graph)) { }
1.1098 + EdgeMap(const ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>& _G, T a) : forward_map(*(_G.graph), a), backward_map(*(_G.graph), a) { }
1.1099 void set(Edge e, T a) {
1.1100 if (e.out_or_in)
1.1101 forward_map.set(e.out, a);
1.1102 else
1.1103 backward_map.set(e.in, a);
1.1104 }
1.1105 - T get(Edge e) {
1.1106 + T operator[](Edge e) const {
1.1107 if (e.out_or_in)
1.1108 - return forward_map.get(e.out);
1.1109 + return forward_map[e.out];
1.1110 else
1.1111 - return backward_map.get(e.in);
1.1112 + return backward_map[e.in];
1.1113 }
1.1114 +// T get(Edge e) const {
1.1115 +// if (e.out_or_in)
1.1116 +// return forward_map.get(e.out);
1.1117 +// else
1.1118 +// return backward_map.get(e.in);
1.1119 +// }
1.1120 };
1.1121 };
1.1122
1.1123 - //Subgraph on the same node-set and partial edge-set
1.1124 - template<typename GraphWrapper, typename FirstOutEdgesMap>
1.1125 - class ErasingFirstGraphWrapper : public GraphWrapperSkeleton<GraphWrapper> {
1.1126 + //ErasingFirstGraphWrapper for blocking flows
1.1127 + template<typename Graph, typename FirstOutEdgesMap>
1.1128 + class ErasingFirstGraphWrapper : public GraphWrapper<Graph> {
1.1129 protected:
1.1130 FirstOutEdgesMap* first_out_edges;
1.1131 public:
1.1132 - typedef typename GraphWrapperSkeleton<GraphWrapper>::Node Node;
1.1133 - typedef typename GraphWrapperSkeleton<GraphWrapper>::NodeIt NodeIt;
1.1134 - typedef typename GraphWrapperSkeleton<GraphWrapper>::Edge Edge;
1.1135 - typedef typename GraphWrapperSkeleton<GraphWrapper>::EdgeIt EdgeIt;
1.1136 - typedef typename GraphWrapperSkeleton<GraphWrapper>::InEdgeIt InEdgeIt;
1.1137 - typedef typename GraphWrapperSkeleton<GraphWrapper>::OutEdgeIt OutEdgeIt;
1.1138 + typedef typename GraphWrapper<Graph>::Node Node;
1.1139 + typedef typename GraphWrapper<Graph>::NodeIt NodeIt;
1.1140 + typedef typename GraphWrapper<Graph>::Edge Edge;
1.1141 + typedef typename GraphWrapper<Graph>::EdgeIt EdgeIt;
1.1142 + typedef typename GraphWrapper<Graph>::InEdgeIt InEdgeIt;
1.1143 + typedef typename GraphWrapper<Graph>::OutEdgeIt OutEdgeIt;
1.1144
1.1145 - ErasingFirstGraphWrapper(GraphWrapper _gw, FirstOutEdgesMap& _first_out_edges) :
1.1146 - GraphWrapperSkeleton<GraphWrapper>(_gw), first_out_edges(&_first_out_edges) { }
1.1147 + ErasingFirstGraphWrapper(Graph& _graph,
1.1148 + FirstOutEdgesMap& _first_out_edges) :
1.1149 + GraphWrapper<Graph>(_graph), first_out_edges(&_first_out_edges) { }
1.1150
1.1151 template<typename I> I& first(I& i) const {
1.1152 - gw.first(i);
1.1153 - //while (gw.valid(i) && !filter_map->get(i)) { gw.next(i); }
1.1154 + graph->first(i);
1.1155 return i;
1.1156 }
1.1157 OutEdgeIt& first(OutEdgeIt& e, const Node& n) const {
1.1158 - e=first_out_edges->get(n);
1.1159 +// e=first_out_edges->get(n);
1.1160 + e=(*first_out_edges)[n];
1.1161 return e;
1.1162 }
1.1163 template<typename I, typename P> I& first(I& i, const P& p) const {
1.1164 - gw.first(i, p);
1.1165 - //while (gw.valid(i) && !filter_map->get(i)) { gw.next(i); }
1.1166 + graph->first(i, p);
1.1167 return i;
1.1168 }
1.1169
1.1170 @@ -1297,8 +1199,7 @@
1.1171 // return gw.getNext(i);
1.1172 //}
1.1173 template<typename I> I& next(I &i) const {
1.1174 - gw.next(i);
1.1175 - //while (gw.valid(i) && !filter_map->get(i)) { gw.next(i); }
1.1176 + graph->next(i);
1.1177 return i;
1.1178 }
1.1179
1.1180 @@ -1315,246 +1216,6 @@
1.1181 }
1.1182 };
1.1183
1.1184 -// template<typename Graph, typename Number, typename FlowMap, typename CapacityMap>
1.1185 -// class ErasingResGraphWrapper : public ResGraphWrapper<Graph, Number, FlowMap, CapacityMap> {
1.1186 -// protected:
1.1187 -// ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::NodeMap<typename ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::OutEdgeIt> first_out_edges;
1.1188 -// //ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::NodeMap<int> dist;
1.1189 -// public:
1.1190 -// ErasingResGraphWrapper(const Graph& _G, FlowMap& _flow,
1.1191 -// const CapacityMap& _capacity) :
1.1192 -// ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>(_G, _flow, _capacity),
1.1193 -// first_out_edges(*this) /*, dist(*this)*/ {
1.1194 -// for(NodeIt n=this->template first<NodeIt>(); this->valid(n); this->next(n)) {
1.1195 -// OutEdgeIt e;
1.1196 -// ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::first(e, n);
1.1197 -// first_out_edges.set(n, e);
1.1198 -// }
1.1199 -// }
1.1200 -
1.1201 -// //void setGraph(Graph& _graph) { graph = &_graph; }
1.1202 -// //Graph& getGraph() const { return (*graph); }
1.1203 -
1.1204 -// //TrivGraphWrapper() : graph(0) { }
1.1205 -// //ErasingResGraphWrapper(Graph& _graph) : graph(&_graph) { }
1.1206 -
1.1207 -// //typedef Graph BaseGraph;
1.1208 -
1.1209 -// //typedef typename Graph::Node Node;
1.1210 -// //typedef typename Graph::NodeIt NodeIt;
1.1211 -
1.1212 -// //typedef typename Graph::Edge Edge;
1.1213 -// //typedef typename Graph::OutEdgeIt OutEdgeIt;
1.1214 -// //typedef typename Graph::InEdgeIt InEdgeIt;
1.1215 -// //typedef typename Graph::SymEdgeIt SymEdgeIt;
1.1216 -// //typedef typename Graph::EdgeIt EdgeIt;
1.1217 -
1.1218 -// typedef typename ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::Node Node;
1.1219 -// typedef typename ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::NodeIt NodeIt;
1.1220 -
1.1221 -// typedef typename ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::Edge Edge;
1.1222 -// typedef typename ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::OutEdgeIt OutEdgeIt;
1.1223 -// //typedef typename ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::InEdgeIt InEdgeIt;
1.1224 -// //typedef typename Graph::SymEdgeIt SymEdgeIt;
1.1225 -// //typedef typename ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::EdgeIt EdgeIt;
1.1226 -
1.1227 -// NodeIt& first(NodeIt& n) const {
1.1228 -// return ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::first(n);
1.1229 -// }
1.1230 -
1.1231 -// OutEdgeIt& first(OutEdgeIt& e, const Node& n) const {
1.1232 -// e=first_out_edges.get(n);
1.1233 -// return e;
1.1234 -// }
1.1235 -
1.1236 -// //ROSSZ template<typename I> I& first(I& i) const { return first(i); }
1.1237 -// //ROSSZ template<typename I, typename P> I& first(I& i, const P& p) const {
1.1238 -// // return first(i, p); }
1.1239 -
1.1240 -// //template<typename I> I getNext(const I& i) const {
1.1241 -// // return gw.getNext(i); }
1.1242 -// //template<typename I> I& next(I &i) const { return gw.next(i); }
1.1243 -
1.1244 -// template< typename It > It first() const {
1.1245 -// It e; first(e); return e; }
1.1246 -
1.1247 -// template< typename It > It first(const Node& v) const {
1.1248 -// It e; first(e, v); return e; }
1.1249 -
1.1250 -// //Node head(const Edge& e) const { return gw.head(e); }
1.1251 -// //Node tail(const Edge& e) const { return gw.tail(e); }
1.1252 -
1.1253 -// //template<typename I> bool valid(const I& i) const
1.1254 -// // { return gw.valid(i); }
1.1255 -
1.1256 -// //int nodeNum() const { return gw.nodeNum(); }
1.1257 -// //int edgeNum() const { return gw.edgeNum(); }
1.1258 -
1.1259 -// //template<typename I> Node aNode(const I& e) const {
1.1260 -// // return gw.aNode(e); }
1.1261 -// //template<typename I> Node bNode(const I& e) const {
1.1262 -// // return gw.bNode(e); }
1.1263 -
1.1264 -// //Node addNode() const { return gw.addNode(); }
1.1265 -// //Edge addEdge(const Node& tail, const Node& head) const {
1.1266 -// // return gw.addEdge(tail, head); }
1.1267 -
1.1268 -// //void erase(const OutEdgeIt& e) {
1.1269 -// // first_out_edge(this->tail(e))=e;
1.1270 -// //}
1.1271 -// void erase(const Edge& e) {
1.1272 -// OutEdgeIt f(e);
1.1273 -// next(f);
1.1274 -// first_out_edges.set(this->tail(e), f);
1.1275 -// }
1.1276 -// //template<typename I> void erase(const I& i) const { gw.erase(i); }
1.1277 -
1.1278 -// //void clear() const { gw.clear(); }
1.1279 -
1.1280 -// template<typename T> class NodeMap : public ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::NodeMap<T> {
1.1281 -// public:
1.1282 -// NodeMap(const ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>& _G) :
1.1283 -// ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::NodeMap<T>(_G /*_G.getGraph()*/) { }
1.1284 -// NodeMap(const ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>& _G, T a) :
1.1285 -// ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::NodeMap<T>(_G /*_G.getGraph()*/, a) { }
1.1286 -// };
1.1287 -
1.1288 -// template<typename T> class EdgeMap : public ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::EdgeMap<T> {
1.1289 -// public:
1.1290 -// EdgeMap(const ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>& _G) :
1.1291 -// ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::EdgeMap<T>(_G /*_G.getGraph()*/) { }
1.1292 -// EdgeMap(const ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>& _G, T a) :
1.1293 -// ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::EdgeMap<T>(_G /*_G.getGraph()*/, a) { }
1.1294 -// };
1.1295 -// };
1.1296 -
1.1297 -// template<typename GraphWrapper>
1.1298 -// class FilterGraphWrapper {
1.1299 -// };
1.1300 -
1.1301 -// template<typename Graph, typename Number, typename FlowMap, typename CapacityMap>
1.1302 -// class FilterGraphWrapper<ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap> > : public ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap> {
1.1303 -
1.1304 -// //Graph* graph;
1.1305 -
1.1306 -// public:
1.1307 -// //typedef Graph BaseGraph;
1.1308 -
1.1309 -// typedef typename ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::Node Node;
1.1310 -// typedef typename ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::NodeIt NodeIt;
1.1311 -
1.1312 -// typedef typename ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::Edge Edge;
1.1313 -// typedef typename ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::OutEdgeIt OutEdgeIt;
1.1314 -// //typedef typename ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::InEdgeIt InEdgeIt;
1.1315 -// //typedef typename Graph::SymEdgeIt SymEdgeIt;
1.1316 -// typedef typename ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::EdgeIt EdgeIt;
1.1317 -
1.1318 -// //FilterGraphWrapper<Graph, Number, FlowMap, CapacityMap>::NodeMap<typename ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::OutEdgeIt> first_out_edges;
1.1319 -
1.1320 -// public:
1.1321 -// FilterGraphWrapper(const Graph& _G, FlowMap& _flow,
1.1322 -// const CapacityMap& _capacity) :
1.1323 -// ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>(_G, _flow, _capacity), dist(*this, gw.nodeNum()) {
1.1324 -// }
1.1325 -
1.1326 -// OutEdgeIt& first(OutEdgeIt& e, const Node& n) const {
1.1327 -// ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::first(e, n);
1.1328 -// while (valid(e) && (dist.get(tail(e))/*+1!=*/>=dist.get(head(e))))
1.1329 -// ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::next(e);
1.1330 -// return e;
1.1331 -// }
1.1332 -
1.1333 -// NodeIt& next(NodeIt& e) const {
1.1334 -// return ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::next(e);
1.1335 -// }
1.1336 -
1.1337 -// OutEdgeIt& next(OutEdgeIt& e) const {
1.1338 -// ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::next(e);
1.1339 -// while (valid(e) && (dist.get(tail(e))/*+1!*/>=dist.get(head(e))))
1.1340 -// ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::next(e);
1.1341 -// return e;
1.1342 -// }
1.1343 -
1.1344 -// NodeIt& first(NodeIt& n) const {
1.1345 -// return ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::first(n);
1.1346 -// }
1.1347 -
1.1348 -// void erase(const Edge& e) {
1.1349 -// OutEdgeIt f(e);
1.1350 -// ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::next(f);
1.1351 -// while (valid(f) && (dist.get(tail(f))/*+1!=*/>=dist.get(head(f))))
1.1352 -// ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::next(f);
1.1353 -// first_out_edges.set(this->tail(e), f);
1.1354 -// }
1.1355 -
1.1356 -// //TrivGraphWrapper() : graph(0) { }
1.1357 -// //TrivGraphWrapper(Graph& _graph) : graph(&_graph) { }
1.1358 -
1.1359 -// //void setGraph(Graph& _graph) { graph = &_graph; }
1.1360 -// //Graph& getGraph() const { return (*graph); }
1.1361 -
1.1362 -// //template<typename I> I& first(I& i) const { return gw.first(i); }
1.1363 -// //template<typename I, typename P> I& first(I& i, const P& p) const {
1.1364 -// // return gw.first(i, p); }
1.1365 -
1.1366 -// //template<typename I> I getNext(const I& i) const {
1.1367 -// // return gw.getNext(i); }
1.1368 -// //template<typename I> I& next(I &i) const { return gw.next(i); }
1.1369 -
1.1370 -// template< typename It > It first() const {
1.1371 -// It e; first(e); return e; }
1.1372 -
1.1373 -// template< typename It > It first(const Node& v) const {
1.1374 -// It e; first(e, v); return e; }
1.1375 -
1.1376 -// //Node head(const Edge& e) const { return gw.head(e); }
1.1377 -// //Node tail(const Edge& e) const { return gw.tail(e); }
1.1378 -
1.1379 -// //template<typename I> bool valid(const I& i) const
1.1380 -// // { return gw.valid(i); }
1.1381 -
1.1382 -// //template<typename I> void setInvalid(const I &i);
1.1383 -// //{ return gw.setInvalid(i); }
1.1384 -
1.1385 -// //int nodeNum() const { return gw.nodeNum(); }
1.1386 -// //int edgeNum() const { return gw.edgeNum(); }
1.1387 -
1.1388 -// //template<typename I> Node aNode(const I& e) const {
1.1389 -// // return gw.aNode(e); }
1.1390 -// //template<typename I> Node bNode(const I& e) const {
1.1391 -// // return gw.bNode(e); }
1.1392 -
1.1393 -// //Node addNode() const { return gw.addNode(); }
1.1394 -// //Edge addEdge(const Node& tail, const Node& head) const {
1.1395 -// // return gw.addEdge(tail, head); }
1.1396 -
1.1397 -// //template<typename I> void erase(const I& i) const { gw.erase(i); }
1.1398 -
1.1399 -// //void clear() const { gw.clear(); }
1.1400 -
1.1401 -// template<typename T> class NodeMap : public ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::NodeMap<T> {
1.1402 -// public:
1.1403 -// NodeMap(const FilterGraphWrapper<ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap> >& _G) :
1.1404 -// ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::NodeMap<T>(_G /*_G.getGraph()*/) { }
1.1405 -// NodeMap(const FilterGraphWrapper<ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap> >& _G, T a) :
1.1406 -// ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::NodeMap<T>(_G /*_G.getGraph()*/, a) { }
1.1407 -// };
1.1408 -
1.1409 -// template<typename T> class EdgeMap : public ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::EdgeMap<T> {
1.1410 -// public:
1.1411 -// EdgeMap(const FilterGraphWrapper<ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap> >& _G) :
1.1412 -// ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::EdgeMap<T>(_G /*_G.getGraph()*/) { }
1.1413 -// EdgeMap(const FilterGraphWrapper<ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap> >& _G, T a) :
1.1414 -// ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::EdgeMap<T>(_G /*_G.getGraph()*/, a) { }
1.1415 -// };
1.1416 -
1.1417 -// public:
1.1418 -// ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::NodeMap<int> dist;
1.1419 -
1.1420 -// };
1.1421 -
1.1422 -
1.1423 -
1.1424 // // FIXME: comparison should be made better!!!
1.1425 // template<typename Graph, typename T, typename LowerMap, typename FlowMap, typename UpperMap>
1.1426 // class ResGraphWrapper
1.1427 @@ -1562,7 +1223,7 @@
1.1428 // Graph* graph;
1.1429
1.1430 // public:
1.1431 -// typedef Graph BaseGraph;
1.1432 +// typedef Graph ParentGraph;
1.1433
1.1434 // typedef typename Graph::Node Node;
1.1435 // typedef typename Graph::Edge Edge;