182 public: |
182 public: |
183 NodeIt() { } |
183 NodeIt() { } |
184 NodeIt(const typename GraphWrapper::NodeIt& n) : |
184 NodeIt(const typename GraphWrapper::NodeIt& n) : |
185 GraphWrapper::NodeIt(n) { } |
185 GraphWrapper::NodeIt(n) { } |
186 NodeIt(const Invalid& i) : GraphWrapper::NodeIt(i) { } |
186 NodeIt(const Invalid& i) : GraphWrapper::NodeIt(i) { } |
187 NodeIt(const GraphWrapperSkeleton<GraphWrapper>& _G) : |
187 NodeIt(const GraphWrapper<GraphWrapper>& _G) : |
188 GraphWrapper::NodeIt(_G.gw) { } |
188 GraphWrapper::NodeIt(_G.gw) { } |
189 }; |
189 }; |
190 typedef typename GraphWrapper::Edge Edge; |
190 typedef typename GraphWrapper::Edge Edge; |
191 //typedef typename GraphWrapper::OutEdgeIt OutEdgeIt; |
191 //typedef typename GraphWrapper::OutEdgeIt OutEdgeIt; |
192 class OutEdgeIt : public GraphWrapper::OutEdgeIt { |
192 class OutEdgeIt : public GraphWrapper::OutEdgeIt { |
193 public: |
193 public: |
194 OutEdgeIt() { } |
194 OutEdgeIt() { } |
195 OutEdgeIt(const typename GraphWrapper::OutEdgeIt& e) : |
195 OutEdgeIt(const typename GraphWrapper::OutEdgeIt& e) : |
196 GraphWrapper::OutEdgeIt(e) { } |
196 GraphWrapper::OutEdgeIt(e) { } |
197 OutEdgeIt(const Invalid& i) : GraphWrapper::OutEdgeIt(i) { } |
197 OutEdgeIt(const Invalid& i) : GraphWrapper::OutEdgeIt(i) { } |
198 OutEdgeIt(const GraphWrapperSkeleton<GraphWrapper>& _G, const Node& n) : |
198 OutEdgeIt(const GraphWrapper<GraphWrapper>& _G, const Node& n) : |
199 GraphWrapper::OutEdgeIt(_G.gw, n) { } |
199 GraphWrapper::OutEdgeIt(_G.gw, n) { } |
200 }; |
200 }; |
201 //typedef typename GraphWrapper::InEdgeIt InEdgeIt; |
201 //typedef typename GraphWrapper::InEdgeIt InEdgeIt; |
202 class InEdgeIt : public GraphWrapper::InEdgeIt { |
202 class InEdgeIt : public GraphWrapper::InEdgeIt { |
203 public: |
203 public: |
204 InEdgeIt() { } |
204 InEdgeIt() { } |
205 InEdgeIt(const typename GraphWrapper::InEdgeIt& e) : |
205 InEdgeIt(const typename GraphWrapper::InEdgeIt& e) : |
206 GraphWrapper::InEdgeIt(e) { } |
206 GraphWrapper::InEdgeIt(e) { } |
207 InEdgeIt(const Invalid& i) : GraphWrapper::InEdgeIt(i) { } |
207 InEdgeIt(const Invalid& i) : GraphWrapper::InEdgeIt(i) { } |
208 InEdgeIt(const GraphWrapperSkeleton<GraphWrapper>& _G, const Node& n) : |
208 InEdgeIt(const GraphWrapper<GraphWrapper>& _G, const Node& n) : |
209 GraphWrapper::InEdgeIt(_G.gw, n) { } |
209 GraphWrapper::InEdgeIt(_G.gw, n) { } |
210 }; |
210 }; |
211 //typedef typename GraphWrapper::SymEdgeIt SymEdgeIt; |
211 //typedef typename GraphWrapper::SymEdgeIt SymEdgeIt; |
212 //typedef typename GraphWrapper::EdgeIt EdgeIt; |
212 //typedef typename GraphWrapper::EdgeIt EdgeIt; |
213 class EdgeIt : public GraphWrapper::EdgeIt { |
213 class EdgeIt : public GraphWrapper::EdgeIt { |
214 public: |
214 public: |
215 EdgeIt() { } |
215 EdgeIt() { } |
216 EdgeIt(const typename GraphWrapper::EdgeIt& e) : |
216 EdgeIt(const typename GraphWrapper::EdgeIt& e) : |
217 GraphWrapper::EdgeIt(e) { } |
217 GraphWrapper::EdgeIt(e) { } |
218 EdgeIt(const Invalid& i) : GraphWrapper::EdgeIt(i) { } |
218 EdgeIt(const Invalid& i) : GraphWrapper::EdgeIt(i) { } |
219 EdgeIt(const GraphWrapperSkeleton<GraphWrapper>& _G) : |
219 EdgeIt(const GraphWrapper<GraphWrapper>& _G) : |
220 GraphWrapper::EdgeIt(_G.gw) { } |
220 GraphWrapper::EdgeIt(_G.gw) { } |
221 }; |
221 }; |
222 |
222 |
223 |
223 |
224 //GraphWrapperSkeleton() : gw() { } |
224 //GraphWrapper() : gw() { } |
225 GraphWrapperSkeleton(GraphWrapper _gw) : gw(_gw) { } |
225 GraphWrapper(GraphWrapper _gw) : gw(_gw) { } |
226 |
226 |
227 //void setGraph(BaseGraph& _graph) { gw.setGraph(_graph); } |
227 //void setGraph(BaseGraph& _graph) { gw.setGraph(_graph); } |
228 //BaseGraph& getGraph() const { return gw.getGraph(); } |
228 //BaseGraph& getGraph() const { return gw.getGraph(); } |
229 |
229 |
230 template<typename I> I& first(I& i) const { |
230 template<typename I> I& first(I& i) const { |
267 |
267 |
268 void clear() const { gw.clear(); } |
268 void clear() const { gw.clear(); } |
269 |
269 |
270 template<typename T> class NodeMap : public GraphWrapper::NodeMap<T> { |
270 template<typename T> class NodeMap : public GraphWrapper::NodeMap<T> { |
271 public: |
271 public: |
272 NodeMap(const GraphWrapperSkeleton<GraphWrapper>& _G) : |
272 NodeMap(const GraphWrapper<GraphWrapper>& _G) : |
273 GraphWrapper::NodeMap<T>(_G.gw) { } |
273 GraphWrapper::NodeMap<T>(_G.gw) { } |
274 NodeMap(const GraphWrapperSkeleton<GraphWrapper>& _G, T a) : |
274 NodeMap(const GraphWrapper<GraphWrapper>& _G, T a) : |
275 GraphWrapper::NodeMap<T>(_G.gw, a) { } |
275 GraphWrapper::NodeMap<T>(_G.gw, a) { } |
276 }; |
276 }; |
277 |
277 |
278 template<typename T> class EdgeMap : public GraphWrapper::EdgeMap<T> { |
278 template<typename T> class EdgeMap : public GraphWrapper::EdgeMap<T> { |
279 public: |
279 public: |
280 EdgeMap(const GraphWrapperSkeleton<GraphWrapper>& _G) : |
280 EdgeMap(const GraphWrapper<GraphWrapper>& _G) : |
281 GraphWrapper::EdgeMap<T>(_G.gw) { } |
281 GraphWrapper::EdgeMap<T>(_G.gw) { } |
282 EdgeMap(const GraphWrapperSkeleton<GraphWrapper>& _G, T a) : |
282 EdgeMap(const GraphWrapper<GraphWrapper>& _G, T a) : |
283 GraphWrapper::EdgeMap<T>(_G.gw, a) { } |
283 GraphWrapper::EdgeMap<T>(_G.gw, a) { } |
284 }; |
284 }; |
285 }; |
285 }; |
286 |
286 |
287 // template<typename Graph> |
287 // template<typename Graph> |
363 // Graph::EdgeMap<T>(_G.getGraph(), a) { } |
363 // Graph::EdgeMap<T>(_G.getGraph(), a) { } |
364 // }; |
364 // }; |
365 // }; |
365 // }; |
366 |
366 |
367 // template<typename /*Graph*/GraphWrapper |
367 // template<typename /*Graph*/GraphWrapper |
368 // /*=typename GraphWrapperSkeleton< TrivGraphWrapper<Graph>*/ > |
368 // /*=typename GraphWrapper< TrivGraphWrapper<Graph>*/ > |
369 // class RevGraphWrapper : |
369 // class RevGraphWrapper : |
370 // public GraphWrapper/*GraphWrapperSkeleton< TrivGraphWrapper<Graph> >*/ { |
370 // public GraphWrapper/*GraphWrapper< TrivGraphWrapper<Graph> >*/ { |
371 // protected: |
371 // protected: |
372 // //Graph* graph; |
372 // //Graph* graph; |
373 |
373 |
374 // public: |
374 // public: |
375 // //typedef Graph BaseGraph; |
375 // //typedef Graph BaseGraph; |
376 |
376 |
377 // //typedef typename Graph::Node Node; |
377 // //typedef typename Graph::Node Node; |
378 // //typedef typename Graph::NodeIt NodeIt; |
378 // //typedef typename Graph::NodeIt NodeIt; |
379 |
379 |
380 // //typedef typename Graph::Edge Edge; |
380 // //typedef typename Graph::Edge Edge; |
381 // typedef typename GraphWrapper/*typename GraphWrapperSkeleton< TrivGraphWrapper<Graph> >*/::OutEdgeIt InEdgeIt; |
381 // typedef typename GraphWrapper/*typename GraphWrapper< TrivGraphWrapper<Graph> >*/::OutEdgeIt InEdgeIt; |
382 // typedef typename GraphWrapper/*typename GraphWrapperSkeleton< TrivGraphWrapper<Graph> >*/::InEdgeIt OutEdgeIt; |
382 // typedef typename GraphWrapper/*typename GraphWrapper< TrivGraphWrapper<Graph> >*/::InEdgeIt OutEdgeIt; |
383 // //typedef typename Graph::SymEdgeIt SymEdgeIt; |
383 // //typedef typename Graph::SymEdgeIt SymEdgeIt; |
384 // //typedef typename Graph::EdgeIt EdgeIt; |
384 // //typedef typename Graph::EdgeIt EdgeIt; |
385 |
385 |
386 // //RevGraphWrapper() : graph(0) { } |
386 // //RevGraphWrapper() : graph(0) { } |
387 // RevGraphWrapper(GraphWrapper _gw/*BaseGraph& _graph*/) : GraphWrapper/*GraphWrapperSkeleton< TrivGraphWrapper<Graph> >*/(_gw/*TrivGraphWrapper<Graph>(_graph)*/) { } |
387 // RevGraphWrapper(GraphWrapper _gw/*BaseGraph& _graph*/) : GraphWrapper/*GraphWrapper< TrivGraphWrapper<Graph> >*/(_gw/*TrivGraphWrapper<Graph>(_graph)*/) { } |
388 |
388 |
389 // //void setGraph(Graph& _graph) { graph = &_graph; } |
389 // //void setGraph(Graph& _graph) { graph = &_graph; } |
390 // //Graph& getGraph() const { return (*graph); } |
390 // //Graph& getGraph() const { return (*graph); } |
391 |
391 |
392 // //template<typename I> I& first(I& i) const { return graph->first(i); } |
392 // //template<typename I> I& first(I& i) const { return graph->first(i); } |
427 // //template<typename I> void erase(const I& i) const { graph->erase(i); } |
427 // //template<typename I> void erase(const I& i) const { graph->erase(i); } |
428 |
428 |
429 // //void clear() const { graph->clear(); } |
429 // //void clear() const { graph->clear(); } |
430 |
430 |
431 // template<typename T> class NodeMap : |
431 // template<typename T> class NodeMap : |
432 // public GraphWrapper/*Skeleton< TrivGraphWrapper<Graph> >*/::NodeMap<T> |
432 // public GraphWrapper/*< TrivGraphWrapper<Graph> >*/::NodeMap<T> |
433 // { |
433 // { |
434 // public: |
434 // public: |
435 // NodeMap(const RevGraphWrapper<GraphWrapper>& _gw) : |
435 // NodeMap(const RevGraphWrapper<GraphWrapper>& _gw) : |
436 // GraphWrapper/*Skeleton< TrivGraphWrapper<Graph> >*/::NodeMap<T>(_gw) { } |
436 // GraphWrapper/*< TrivGraphWrapper<Graph> >*/::NodeMap<T>(_gw) { } |
437 // NodeMap(const RevGraphWrapper<GraphWrapper>& _gw, T a) : |
437 // NodeMap(const RevGraphWrapper<GraphWrapper>& _gw, T a) : |
438 // GraphWrapper/*Skeleton< TrivGraphWrapper<Graph> >*/::NodeMap<T>(_gw, a) { } |
438 // GraphWrapper/*< TrivGraphWrapper<Graph> >*/::NodeMap<T>(_gw, a) { } |
439 // }; |
439 // }; |
440 |
440 |
441 // template<typename T> class EdgeMap : |
441 // template<typename T> class EdgeMap : |
442 // public GraphWrapper/*Skeleton< TrivGraphWrapper<Graph> >*/::EdgeMap<T> { |
442 // public GraphWrapper/*< TrivGraphWrapper<Graph> >*/::EdgeMap<T> { |
443 // public: |
443 // public: |
444 // EdgeMap(const RevGraphWrapper<GraphWrapper>& _gw) : |
444 // EdgeMap(const RevGraphWrapper<GraphWrapper>& _gw) : |
445 // GraphWrapper/*Skeleton< TrivGraphWrapper<Graph> >*/::EdgeMap<T>(_gw) { } |
445 // GraphWrapper/*< TrivGraphWrapper<Graph> >*/::EdgeMap<T>(_gw) { } |
446 // EdgeMap(const RevGraphWrapper<GraphWrapper>& _gw, T a) : |
446 // EdgeMap(const RevGraphWrapper<GraphWrapper>& _gw, T a) : |
447 // GraphWrapper/*Skeleton< TrivGraphWrapper<Graph> >*/::EdgeMap<T>(_gw, a) { } |
447 // GraphWrapper/*< TrivGraphWrapper<Graph> >*/::EdgeMap<T>(_gw, a) { } |
448 // }; |
448 // }; |
449 // }; |
449 // }; |
450 |
450 |
451 template<typename GraphWrapper> |
451 template<typename GraphWrapper> |
452 class RevGraphWrapper : public GraphWrapperSkeleton<GraphWrapper> { |
452 class RevGraphWrapper : public GraphWrapper<GraphWrapper> { |
453 public: |
453 public: |
454 typedef typename GraphWrapperSkeleton<GraphWrapper>::Node Node; |
454 typedef typename GraphWrapper<GraphWrapper>::Node Node; |
455 typedef typename GraphWrapperSkeleton<GraphWrapper>::Edge Edge; |
455 typedef typename GraphWrapper<GraphWrapper>::Edge Edge; |
456 //FIXME |
456 //FIXME |
457 //If GraphWrapper::OutEdgeIt is not defined |
457 //If GraphWrapper::OutEdgeIt is not defined |
458 //and we do not want to use RevGraphWrapper::InEdgeIt, |
458 //and we do not want to use RevGraphWrapper::InEdgeIt, |
459 //this won't work, because of typedef |
459 //this won't work, because of typedef |
460 //OR |
460 //OR |
461 //graphs have to define their non-existing iterators to void |
461 //graphs have to define their non-existing iterators to void |
462 //Unfortunately all the typedefs are instantiated in templates, |
462 //Unfortunately all the typedefs are instantiated in templates, |
463 //unlike other stuff |
463 //unlike other stuff |
464 typedef typename GraphWrapperSkeleton<GraphWrapper>::OutEdgeIt InEdgeIt; |
464 typedef typename GraphWrapper<GraphWrapper>::OutEdgeIt InEdgeIt; |
465 typedef typename GraphWrapperSkeleton<GraphWrapper>::InEdgeIt OutEdgeIt; |
465 typedef typename GraphWrapper<GraphWrapper>::InEdgeIt OutEdgeIt; |
466 |
466 |
467 RevGraphWrapper(GraphWrapper _gw) : |
467 RevGraphWrapper(GraphWrapper _gw) : |
468 GraphWrapperSkeleton<GraphWrapper>(_gw) { } |
468 GraphWrapper<GraphWrapper>(_gw) { } |
469 |
469 |
470 Node head(const Edge& e) const |
470 Node head(const Edge& e) const |
471 { return GraphWrapperSkeleton<GraphWrapper>::tail(e); } |
471 { return GraphWrapper<GraphWrapper>::tail(e); } |
472 Node tail(const Edge& e) const |
472 Node tail(const Edge& e) const |
473 { return GraphWrapperSkeleton<GraphWrapper>::head(e); } |
473 { return GraphWrapper<GraphWrapper>::head(e); } |
474 }; |
474 }; |
475 |
475 |
476 //Subgraph on the same node-set and partial edge-set |
476 //Subgraph on the same node-set and partial edge-set |
477 template<typename GraphWrapper, typename EdgeFilterMap> |
477 template<typename GraphWrapper, typename EdgeFilterMap> |
478 class SubGraphWrapper : public GraphWrapperSkeleton<GraphWrapper> { |
478 class SubGraphWrapper : public GraphWrapper<GraphWrapper> { |
479 protected: |
479 protected: |
480 EdgeFilterMap* filter_map; |
480 EdgeFilterMap* filter_map; |
481 public: |
481 public: |
482 typedef typename GraphWrapperSkeleton<GraphWrapper>::Node Node; |
482 typedef typename GraphWrapper<GraphWrapper>::Node Node; |
483 typedef typename GraphWrapperSkeleton<GraphWrapper>::NodeIt NodeIt; |
483 typedef typename GraphWrapper<GraphWrapper>::NodeIt NodeIt; |
484 typedef typename GraphWrapperSkeleton<GraphWrapper>::Edge Edge; |
484 typedef typename GraphWrapper<GraphWrapper>::Edge Edge; |
485 typedef typename GraphWrapperSkeleton<GraphWrapper>::EdgeIt EdgeIt; |
485 typedef typename GraphWrapper<GraphWrapper>::EdgeIt EdgeIt; |
486 typedef typename GraphWrapperSkeleton<GraphWrapper>::InEdgeIt InEdgeIt; |
486 typedef typename GraphWrapper<GraphWrapper>::InEdgeIt InEdgeIt; |
487 typedef typename GraphWrapperSkeleton<GraphWrapper>::OutEdgeIt OutEdgeIt; |
487 typedef typename GraphWrapper<GraphWrapper>::OutEdgeIt OutEdgeIt; |
488 |
488 |
489 SubGraphWrapper(GraphWrapper _gw, EdgeFilterMap& _filter_map) : |
489 SubGraphWrapper(GraphWrapper _gw, EdgeFilterMap& _filter_map) : |
490 GraphWrapperSkeleton<GraphWrapper>(_gw), filter_map(&_filter_map) { } |
490 GraphWrapper<GraphWrapper>(_gw), filter_map(&_filter_map) { } |
491 |
491 |
492 template<typename I> I& first(I& i) const { |
492 template<typename I> I& first(I& i) const { |
493 gw.first(i); |
493 gw.first(i); |
494 while (gw.valid(i) && !filter_map->get(i)) { gw.next(i); } |
494 while (gw.valid(i) && !filter_map->get(i)) { gw.next(i); } |
495 return i; |
495 return i; |
675 // }; |
675 // }; |
676 // }; |
676 // }; |
677 |
677 |
678 |
678 |
679 template<typename GraphWrapper> |
679 template<typename GraphWrapper> |
680 class UndirGraphWrapper : public GraphWrapperSkeleton<GraphWrapper> { |
680 class UndirGraphWrapper : public GraphWrapper<GraphWrapper> { |
681 protected: |
681 protected: |
682 // GraphWrapper gw; |
682 // GraphWrapper gw; |
683 |
683 |
684 public: |
684 public: |
685 //typedef GraphWrapper BaseGraph; |
685 //typedef GraphWrapper BaseGraph; |
686 |
686 |
687 typedef typename GraphWrapperSkeleton<GraphWrapper>::Node Node; |
687 typedef typename GraphWrapper<GraphWrapper>::Node Node; |
688 typedef typename GraphWrapperSkeleton<GraphWrapper>::NodeIt NodeIt; |
688 typedef typename GraphWrapper<GraphWrapper>::NodeIt NodeIt; |
689 |
689 |
690 //private: |
690 //private: |
691 //FIXME ezeknek valojaban a GraphWrapper megfelelo dolgai kellene hogy |
691 //FIXME ezeknek valojaban a GraphWrapper megfelelo dolgai kellene hogy |
692 //legyenek, at kell irni |
692 //legyenek, at kell irni |
693 typedef typename /*GraphWrapperSkeleton<GraphWrapper>*/ |
693 typedef typename /*GraphWrapper<GraphWrapper>*/ |
694 GraphWrapper::Edge GraphEdge; |
694 GraphWrapper::Edge GraphEdge; |
695 typedef typename /*GraphWrapperSkeleton<GraphWrapper>*/ |
695 typedef typename /*GraphWrapper<GraphWrapper>*/ |
696 GraphWrapper::OutEdgeIt GraphOutEdgeIt; |
696 GraphWrapper::OutEdgeIt GraphOutEdgeIt; |
697 typedef typename /*GraphWrapperSkeleton<GraphWrapper>*/ |
697 typedef typename /*GraphWrapper<GraphWrapper>*/ |
698 GraphWrapper::InEdgeIt GraphInEdgeIt; |
698 GraphWrapper::InEdgeIt GraphInEdgeIt; |
699 //public: |
699 //public: |
700 |
700 |
701 //UndirGraphWrapper() : graph(0) { } |
701 //UndirGraphWrapper() : graph(0) { } |
702 UndirGraphWrapper(GraphWrapper _gw) : |
702 UndirGraphWrapper(GraphWrapper _gw) : |
703 GraphWrapperSkeleton<GraphWrapper>(_gw) { } |
703 GraphWrapper<GraphWrapper>(_gw) { } |
704 |
704 |
705 //UndirGraphWrapper(GraphWrapper _gw) : gw(_gw) { } |
705 //UndirGraphWrapper(GraphWrapper _gw) : gw(_gw) { } |
706 |
706 |
707 //void setGraph(Graph& _graph) { graph = &_graph; } |
707 //void setGraph(Graph& _graph) { graph = &_graph; } |
708 //Graph& getGraph() const { return (*graph); } |
708 //Graph& getGraph() const { return (*graph); } |
945 // SymGraphWrapper(Graph& _graph) : graph(&_graph) { } |
945 // SymGraphWrapper(Graph& _graph) : graph(&_graph) { } |
946 // }; |
946 // }; |
947 |
947 |
948 |
948 |
949 template<typename GraphWrapper, typename Number, typename FlowMap, typename CapacityMap> |
949 template<typename GraphWrapper, typename Number, typename FlowMap, typename CapacityMap> |
950 class ResGraphWrapper : public GraphWrapperSkeleton<GraphWrapper>{ |
950 class ResGraphWrapper : public GraphWrapper<GraphWrapper>{ |
951 public: |
951 public: |
952 //typedef Graph BaseGraph; |
952 //typedef Graph BaseGraph; |
953 //typedef TrivGraphWrapper<const Graph> GraphWrapper; |
953 //typedef TrivGraphWrapper<const Graph> GraphWrapper; |
954 typedef typename GraphWrapperSkeleton<GraphWrapper>::Node Node; |
954 typedef typename GraphWrapper<GraphWrapper>::Node Node; |
955 typedef typename GraphWrapperSkeleton<GraphWrapper>::NodeIt NodeIt; |
955 typedef typename GraphWrapper<GraphWrapper>::NodeIt NodeIt; |
956 private: |
956 private: |
957 typedef typename /*GraphWrapperSkeleton<GraphWrapper>*/ |
957 typedef typename /*GraphWrapper<GraphWrapper>*/ |
958 GraphWrapper::OutEdgeIt OldOutEdgeIt; |
958 GraphWrapper::OutEdgeIt OldOutEdgeIt; |
959 typedef typename /*GraphWrapperSkeleton<GraphWrapper>*/ |
959 typedef typename /*GraphWrapper<GraphWrapper>*/ |
960 GraphWrapper::InEdgeIt OldInEdgeIt; |
960 GraphWrapper::InEdgeIt OldInEdgeIt; |
961 protected: |
961 protected: |
962 //const Graph* graph; |
962 //const Graph* graph; |
963 //GraphWrapper gw; |
963 //GraphWrapper gw; |
964 FlowMap* flow; |
964 FlowMap* flow; |
965 const CapacityMap* capacity; |
965 const CapacityMap* capacity; |
966 public: |
966 public: |
967 |
967 |
968 ResGraphWrapper(const GraphWrapper& _gw, FlowMap& _flow, |
968 ResGraphWrapper(const GraphWrapper& _gw, FlowMap& _flow, |
969 const CapacityMap& _capacity) : |
969 const CapacityMap& _capacity) : |
970 GraphWrapperSkeleton<GraphWrapper>(_gw), |
970 GraphWrapper<GraphWrapper>(_gw), |
971 flow(&_flow), capacity(&_capacity) { } |
971 flow(&_flow), capacity(&_capacity) { } |
972 |
972 |
973 //void setGraph(const Graph& _graph) { graph = &_graph; } |
973 //void setGraph(const Graph& _graph) { graph = &_graph; } |
974 //const Graph& getGraph() const { return (*graph); } |
974 //const Graph& getGraph() const { return (*graph); } |
975 |
975 |
1262 }; |
1262 }; |
1263 }; |
1263 }; |
1264 |
1264 |
1265 //Subgraph on the same node-set and partial edge-set |
1265 //Subgraph on the same node-set and partial edge-set |
1266 template<typename GraphWrapper, typename FirstOutEdgesMap> |
1266 template<typename GraphWrapper, typename FirstOutEdgesMap> |
1267 class ErasingFirstGraphWrapper : public GraphWrapperSkeleton<GraphWrapper> { |
1267 class ErasingFirstGraphWrapper : public GraphWrapper<GraphWrapper> { |
1268 protected: |
1268 protected: |
1269 FirstOutEdgesMap* first_out_edges; |
1269 FirstOutEdgesMap* first_out_edges; |
1270 public: |
1270 public: |
1271 typedef typename GraphWrapperSkeleton<GraphWrapper>::Node Node; |
1271 typedef typename GraphWrapper<GraphWrapper>::Node Node; |
1272 typedef typename GraphWrapperSkeleton<GraphWrapper>::NodeIt NodeIt; |
1272 typedef typename GraphWrapper<GraphWrapper>::NodeIt NodeIt; |
1273 typedef typename GraphWrapperSkeleton<GraphWrapper>::Edge Edge; |
1273 typedef typename GraphWrapper<GraphWrapper>::Edge Edge; |
1274 typedef typename GraphWrapperSkeleton<GraphWrapper>::EdgeIt EdgeIt; |
1274 typedef typename GraphWrapper<GraphWrapper>::EdgeIt EdgeIt; |
1275 typedef typename GraphWrapperSkeleton<GraphWrapper>::InEdgeIt InEdgeIt; |
1275 typedef typename GraphWrapper<GraphWrapper>::InEdgeIt InEdgeIt; |
1276 typedef typename GraphWrapperSkeleton<GraphWrapper>::OutEdgeIt OutEdgeIt; |
1276 typedef typename GraphWrapper<GraphWrapper>::OutEdgeIt OutEdgeIt; |
1277 |
1277 |
1278 ErasingFirstGraphWrapper(GraphWrapper _gw, FirstOutEdgesMap& _first_out_edges) : |
1278 ErasingFirstGraphWrapper(GraphWrapper _gw, FirstOutEdgesMap& _first_out_edges) : |
1279 GraphWrapperSkeleton<GraphWrapper>(_gw), first_out_edges(&_first_out_edges) { } |
1279 GraphWrapper<GraphWrapper>(_gw), first_out_edges(&_first_out_edges) { } |
1280 |
1280 |
1281 template<typename I> I& first(I& i) const { |
1281 template<typename I> I& first(I& i) const { |
1282 gw.first(i); |
1282 gw.first(i); |
1283 //while (gw.valid(i) && !filter_map->get(i)) { gw.next(i); } |
1283 //while (gw.valid(i) && !filter_map->get(i)) { gw.next(i); } |
1284 return i; |
1284 return i; |