|     22       NodeIt(const Invalid& i) : Graph::NodeIt(i) { } |     27       NodeIt(const Invalid& i) : Graph::NodeIt(i) { } | 
|     23       NodeIt(const TrivGraphWrapper<Graph>& _G) :  |     28       NodeIt(const TrivGraphWrapper<Graph>& _G) :  | 
|     24 	Graph::NodeIt(*(_G.graph)) { } |     29 	Graph::NodeIt(*(_G.graph)) { } | 
|     25     }; |     30     }; | 
|     26     typedef typename Graph::Edge Edge; |     31     typedef typename Graph::Edge Edge; | 
|     27     //typedef typename Graph::OutEdgeIt OutEdgeIt; |         | 
|     28     class OutEdgeIt : public Graph::OutEdgeIt {  |     32     class OutEdgeIt : public Graph::OutEdgeIt {  | 
|     29     public: |     33     public: | 
|     30       OutEdgeIt() { } |     34       OutEdgeIt() { } | 
|     31       OutEdgeIt(const typename Graph::OutEdgeIt& e) : Graph::OutEdgeIt(e) { } |     35       OutEdgeIt(const typename Graph::OutEdgeIt& e) : Graph::OutEdgeIt(e) { } | 
|     32       OutEdgeIt(const Invalid& i) : Graph::OutEdgeIt(i) { } |     36       OutEdgeIt(const Invalid& i) : Graph::OutEdgeIt(i) { } | 
|     33       OutEdgeIt(const TrivGraphWrapper<Graph>& _G, const Node& n) :  |     37       OutEdgeIt(const TrivGraphWrapper<Graph>& _G, const Node& n) :  | 
|     34 	Graph::OutEdgeIt(*(_G.graph), n) { } |     38 	Graph::OutEdgeIt(*(_G.graph), n) { } | 
|     35     }; |     39     }; | 
|     36     //typedef typename Graph::InEdgeIt InEdgeIt; |         | 
|     37     class InEdgeIt : public Graph::InEdgeIt {  |     40     class InEdgeIt : public Graph::InEdgeIt {  | 
|     38     public: |     41     public: | 
|     39       InEdgeIt() { } |     42       InEdgeIt() { } | 
|     40       InEdgeIt(const typename Graph::InEdgeIt& e) : Graph::InEdgeIt(e) { } |     43       InEdgeIt(const typename Graph::InEdgeIt& e) : Graph::InEdgeIt(e) { } | 
|     41       InEdgeIt(const Invalid& i) : Graph::InEdgeIt(i) { } |     44       InEdgeIt(const Invalid& i) : Graph::InEdgeIt(i) { } | 
|     42       InEdgeIt(const TrivGraphWrapper<Graph>& _G, const Node& n) :  |     45       InEdgeIt(const TrivGraphWrapper<Graph>& _G, const Node& n) :  | 
|     43 	Graph::InEdgeIt(*(_G.graph), n) { } |     46 	Graph::InEdgeIt(*(_G.graph), n) { } | 
|     44     }; |     47     }; | 
|     45     //typedef typename Graph::SymEdgeIt SymEdgeIt; |     48     //typedef typename Graph::SymEdgeIt SymEdgeIt; | 
|     46     //typedef typename Graph::EdgeIt EdgeIt; |         | 
|     47     class EdgeIt : public Graph::EdgeIt {  |     49     class EdgeIt : public Graph::EdgeIt {  | 
|     48     public: |     50     public: | 
|     49       EdgeIt() { } |     51       EdgeIt() { } | 
|     50       EdgeIt(const typename Graph::EdgeIt& e) : Graph::EdgeIt(e) { } |     52       EdgeIt(const typename Graph::EdgeIt& e) : Graph::EdgeIt(e) { } | 
|     51       EdgeIt(const Invalid& i) : Graph::EdgeIt(i) { } |     53       EdgeIt(const Invalid& i) : Graph::EdgeIt(i) { } | 
|     52       EdgeIt(const TrivGraphWrapper<Graph>& _G) :  |     54       EdgeIt(const TrivGraphWrapper<Graph>& _G) :  | 
|     53 	Graph::EdgeIt(*(_G.graph)) { } |     55 	Graph::EdgeIt(*(_G.graph)) { } | 
|     54     }; |     56     }; | 
|     55  |     57  | 
|     56     //TrivGraphWrapper() : graph(0) { } |         | 
|     57     TrivGraphWrapper(Graph& _graph) : graph(&_graph) { } |         | 
|     58  |         | 
|     59 //    void setGraph(Graph& _graph) { graph = &_graph; } |         | 
|     60 //    Graph& getGraph() const { return (*graph); } |         | 
|     61  |         | 
|     62     NodeIt& first(NodeIt& i) const {  |     58     NodeIt& first(NodeIt& i) const {  | 
|     63       i=NodeIt(*this); |     59       i=NodeIt(*this); | 
|     64       return i; |     60       return i; | 
|     65     } |     61     } | 
|     66     EdgeIt& first(EdgeIt& i) const {  |     62     EdgeIt& first(EdgeIt& i) const {  | 
|     67       i=EdgeIt(*this); |     63       i=EdgeIt(*this); | 
|     68       return i; |     64       return i; | 
|     69     } |     65     } | 
|     70 //     template<typename I> I& first(I& i) const {  |     66 //     template<typename I> I& first(I& i) const {  | 
|     71 //       //return graph->first(i);  |         | 
|     72 //       i=I(*this); |     67 //       i=I(*this); | 
|     73 //       return i; |     68 //       return i; | 
|     74 //     } |     69 //     } | 
|     75     OutEdgeIt& first(OutEdgeIt& i, const Node& p) const {  |     70     OutEdgeIt& first(OutEdgeIt& i, const Node& p) const {  | 
|     76       i=OutEdgeIt(*this, p); |     71       i=OutEdgeIt(*this, p); | 
|    140     template<typename Map, typename T> class NodeMapWrapper { |    134     template<typename Map, typename T> class NodeMapWrapper { | 
|    141     protected: |    135     protected: | 
|    142       Map* map; |    136       Map* map; | 
|    143     public: |    137     public: | 
|    144       NodeMapWrapper(Map& _map) : map(&_map) { } |    138       NodeMapWrapper(Map& _map) : map(&_map) { } | 
|    145       //template<typename T>  |         | 
|    146       void set(Node n, T a) { map->set(n, a); } |    139       void set(Node n, T a) { map->set(n, a); } | 
|    147       //template<typename T> |         | 
|    148       T get(Node n) const { return map->get(n); } |    140       T get(Node n) const { return map->get(n); } | 
|    149     }; |    141     }; | 
|    150  |    142  | 
|    151     template<typename Map, typename T> class EdgeMapWrapper { |    143     template<typename Map, typename T> class EdgeMapWrapper { | 
|    152     protected: |    144     protected: | 
|    153       Map* map; |    145       Map* map; | 
|    154     public: |    146     public: | 
|    155       EdgeMapWrapper(Map& _map) : map(&_map) { } |    147       EdgeMapWrapper(Map& _map) : map(&_map) { } | 
|    156       //template<typename T>  |         | 
|    157       void set(Edge n, T a) { map->set(n, a); } |    148       void set(Edge n, T a) { map->set(n, a); } | 
|    158       //template<typename T> |         | 
|    159       T get(Edge n) const { return map->get(n); } |    149       T get(Edge n) const { return map->get(n); } | 
|    160     }; |    150     }; | 
|    161   }; |    151   }; | 
|    162  |    152  | 
|    163   template<typename GraphWrapper> |    153  | 
|    164   class GraphWrapperSkeleton { |    154   template<typename Graph> | 
|         |    155   class GraphWrapper { | 
|    165   protected: |    156   protected: | 
|    166     GraphWrapper gw; |    157     Graph* graph; | 
|    167    |    158    | 
|    168   public: |    159   public: | 
|    169     //typedef typename GraphWrapper::BaseGraph BaseGraph; |    160     typedef Graph BaseGraph; | 
|    170  |    161  | 
|    171 //     typedef typename GraphWrapper::Node Node; |    162 //     GraphWrapper() : graph(0) { } | 
|    172 //     typedef typename GraphWrapper::NodeIt NodeIt; |    163     GraphWrapper(Graph& _graph) : graph(&_graph) { } | 
|    173  |    164 //     void setGraph(Graph& _graph) { graph=&_graph; } | 
|    174 //     typedef typename GraphWrapper::Edge Edge; |    165 //     Graph& getGraph() const { return *graph; } | 
|    175 //     typedef typename GraphWrapper::OutEdgeIt OutEdgeIt; |    166   | 
|    176 //     typedef typename GraphWrapper::InEdgeIt InEdgeIt; |    167     typedef typename Graph::Node Node; | 
|    177 //     //typedef typename GraphWrapper::SymEdgeIt SymEdgeIt; |    168     class NodeIt : public Graph::NodeIt {  | 
|    178 //     typedef typename GraphWrapper::EdgeIt EdgeIt; |         | 
|    179  |         | 
|    180     typedef typename GraphWrapper::Node Node; |         | 
|    181     class NodeIt : public GraphWrapper::NodeIt {  |         | 
|    182     public: |    169     public: | 
|    183       NodeIt() { } |    170       NodeIt() { } | 
|    184       NodeIt(const typename GraphWrapper::NodeIt& n) :  |    171       NodeIt(const typename Graph::NodeIt& n) : Graph::NodeIt(n) { } | 
|    185 	GraphWrapper::NodeIt(n) { } |    172       NodeIt(const Invalid& i) : Graph::NodeIt(i) { } | 
|    186       NodeIt(const Invalid& i) : GraphWrapper::NodeIt(i) { } |    173       NodeIt(const GraphWrapper<Graph>& _G) :  | 
|    187       NodeIt(const GraphWrapperSkeleton<GraphWrapper>& _G) :  |    174 	Graph::NodeIt(*(_G.graph)) { } | 
|    188 	GraphWrapper::NodeIt(_G.gw) { } |    175     }; | 
|    189     }; |    176     typedef typename Graph::Edge Edge; | 
|    190     typedef typename GraphWrapper::Edge Edge; |    177     class OutEdgeIt : public Graph::OutEdgeIt {  | 
|    191     //typedef typename GraphWrapper::OutEdgeIt OutEdgeIt; |         | 
|    192     class OutEdgeIt : public GraphWrapper::OutEdgeIt {  |         | 
|    193     public: |    178     public: | 
|    194       OutEdgeIt() { } |    179       OutEdgeIt() { } | 
|    195       OutEdgeIt(const typename GraphWrapper::OutEdgeIt& e) :  |    180       OutEdgeIt(const typename Graph::OutEdgeIt& e) : Graph::OutEdgeIt(e) { } | 
|    196 	GraphWrapper::OutEdgeIt(e) { } |    181       OutEdgeIt(const Invalid& i) : Graph::OutEdgeIt(i) { } | 
|    197       OutEdgeIt(const Invalid& i) : GraphWrapper::OutEdgeIt(i) { } |    182       OutEdgeIt(const GraphWrapper<Graph>& _G, const Node& n) :  | 
|    198       OutEdgeIt(const GraphWrapperSkeleton<GraphWrapper>& _G, const Node& n) :  |    183 	Graph::OutEdgeIt(*(_G.graph), n) { } | 
|    199 	GraphWrapper::OutEdgeIt(_G.gw, n) { } |    184     }; | 
|    200     }; |    185     class InEdgeIt : public Graph::InEdgeIt {  | 
|    201     //typedef typename GraphWrapper::InEdgeIt InEdgeIt; |         | 
|    202     class InEdgeIt : public GraphWrapper::InEdgeIt {  |         | 
|    203     public: |    186     public: | 
|    204       InEdgeIt() { } |    187       InEdgeIt() { } | 
|    205       InEdgeIt(const typename GraphWrapper::InEdgeIt& e) :  |    188       InEdgeIt(const typename Graph::InEdgeIt& e) : Graph::InEdgeIt(e) { } | 
|    206 	GraphWrapper::InEdgeIt(e) { } |    189       InEdgeIt(const Invalid& i) : Graph::InEdgeIt(i) { } | 
|    207       InEdgeIt(const Invalid& i) : GraphWrapper::InEdgeIt(i) { } |    190       InEdgeIt(const GraphWrapper<Graph>& _G, const Node& n) :  | 
|    208       InEdgeIt(const GraphWrapperSkeleton<GraphWrapper>& _G, const Node& n) :  |    191 	Graph::InEdgeIt(*(_G.graph), n) { } | 
|    209 	GraphWrapper::InEdgeIt(_G.gw, n) { } |    192     }; | 
|    210     }; |    193     //typedef typename Graph::SymEdgeIt SymEdgeIt; | 
|    211     //typedef typename GraphWrapper::SymEdgeIt SymEdgeIt; |    194     class EdgeIt : public Graph::EdgeIt {  | 
|    212     //typedef typename GraphWrapper::EdgeIt EdgeIt; |         | 
|    213     class EdgeIt : public GraphWrapper::EdgeIt {  |         | 
|    214     public: |    195     public: | 
|    215       EdgeIt() { } |    196       EdgeIt() { } | 
|    216       EdgeIt(const typename GraphWrapper::EdgeIt& e) :  |    197       EdgeIt(const typename Graph::EdgeIt& e) : Graph::EdgeIt(e) { } | 
|    217 	GraphWrapper::EdgeIt(e) { } |    198       EdgeIt(const Invalid& i) : Graph::EdgeIt(i) { } | 
|    218       EdgeIt(const Invalid& i) : GraphWrapper::EdgeIt(i) { } |    199       EdgeIt(const GraphWrapper<Graph>& _G) :  | 
|    219       EdgeIt(const GraphWrapperSkeleton<GraphWrapper>& _G) :  |    200 	Graph::EdgeIt(*(_G.graph)) { } | 
|    220 	GraphWrapper::EdgeIt(_G.gw) { } |    201     }; | 
|    221     }; |    202     | 
|    222  |    203     NodeIt& first(NodeIt& i) const {  | 
|    223  |    204       i=NodeIt(*this); | 
|    224     //GraphWrapperSkeleton() : gw() { } |         | 
|    225     GraphWrapperSkeleton(GraphWrapper _gw) : gw(_gw) { } |         | 
|    226  |         | 
|    227     //void setGraph(BaseGraph& _graph) { gw.setGraph(_graph); } |         | 
|    228     //BaseGraph& getGraph() const { return gw.getGraph(); } |         | 
|    229      |         | 
|    230     template<typename I> I& first(I& i) const {        |         | 
|    231       i=I(*this); |         | 
|    232       return i; |    205       return i; | 
|    233     } |    206     } | 
|    234     template<typename I, typename P> I& first(I& i, const P& p) const {  |    207     EdgeIt& first(EdgeIt& i) const {  | 
|    235       i=I(*this, p); |    208       i=EdgeIt(*this); | 
|    236       return i;  |    209       return i; | 
|    237     } |    210     } | 
|    238      |    211 //     template<typename I> I& first(I& i) const {        | 
|    239 //    template<typename I> I getNext(const I& i) const { return gw.getNext(i); } |    212 //       i=I(*this); | 
|    240     template<typename I> I& next(I &i) const { gw.next(i); return i; }     |    213 //       return i; | 
|         |    214 //     } | 
|         |    215     OutEdgeIt& first(OutEdgeIt& i, const Node& p) const {  | 
|         |    216       i=OutEdgeIt(*this, p); | 
|         |    217       return i; | 
|         |    218     } | 
|         |    219     InEdgeIt& first(InEdgeIt& i, const Node& p) const {  | 
|         |    220       i=InEdgeIt(*this, p); | 
|         |    221       return i; | 
|         |    222     } | 
|         |    223 //     template<typename I, typename P> I& first(I& i, const P& p) const {  | 
|         |    224 //       i=I(*this, p); | 
|         |    225 //       return i;  | 
|         |    226 //     } | 
|         |    227      | 
|         |    228 //    template<typename I> I getNext(const I& i) const {  | 
|         |    229 //      return gw.getNext(i); } | 
|         |    230     template<typename I> I& next(I &i) const { graph->next(i); return i; }     | 
|    241  |    231  | 
|    242     template< typename It > It first() const {  |    232     template< typename It > It first() const {  | 
|    243       It e; this->first(e); return e; } |    233       It e; this->first(e); return e; } | 
|    244  |    234  | 
|    245     template< typename It > It first(const Node& v) const {  |    235     template< typename It > It first(const Node& v) const {  | 
|    246       It e; this->first(e, v); return e; } |    236       It e; this->first(e, v); return e; } | 
|    247  |    237  | 
|    248     Node head(const Edge& e) const { return gw.head(e); } |    238     Node head(const Edge& e) const { return graph->head(e); } | 
|    249     Node tail(const Edge& e) const { return gw.tail(e); } |    239     Node tail(const Edge& e) const { return graph->tail(e); } | 
|    250  |    240  | 
|    251     template<typename I> bool valid(const I& i) const { return gw.valid(i); } |    241     template<typename I> bool valid(const I& i) const {  | 
|         |    242       return graph->valid(i); } | 
|    252    |    243    | 
|    253     //template<typename I> void setInvalid(const I &i); |    244     //template<typename I> void setInvalid(const I &i); | 
|    254     //{ return graph->setInvalid(i); } |    245     //{ return graph->setInvalid(i); } | 
|    255  |    246  | 
|    256     int nodeNum() const { return gw.nodeNum(); } |    247     int nodeNum() const { return graph->nodeNum(); } | 
|    257     int edgeNum() const { return gw.edgeNum(); } |    248     int edgeNum() const { return graph->edgeNum(); } | 
|    258    |    249    | 
|    259     template<typename I> Node aNode(const I& e) const { return gw.aNode(e); } |    250     template<typename I> Node aNode(const I& e) const {  | 
|    260     template<typename I> Node bNode(const I& e) const { return gw.bNode(e); } |    251       return graph->aNode(e); } | 
|    261    |    252     template<typename I> Node bNode(const I& e) const {  | 
|    262     Node addNode() const { return gw.addNode(); } |    253       return graph->bNode(e); } | 
|         |    254    | 
|         |    255     Node addNode() const { return graph->addNode(); } | 
|    263     Edge addEdge(const Node& tail, const Node& head) const {  |    256     Edge addEdge(const Node& tail, const Node& head) const {  | 
|    264       return gw.addEdge(tail, head); } |    257       return graph->addEdge(tail, head); } | 
|    265    |    258    | 
|    266     template<typename I> void erase(const I& i) const { gw.erase(i); } |    259     template<typename I> void erase(const I& i) const { graph->erase(i); } | 
|    267    |    260    | 
|    268     void clear() const { gw.clear(); } |    261     void clear() const { graph->clear(); } | 
|    269      |    262      | 
|    270     template<typename T> class NodeMap : public GraphWrapper::NodeMap<T> {  |    263     template<typename T> class NodeMap : public Graph::NodeMap<T> {  | 
|    271     public: |    264     public: | 
|    272       NodeMap(const GraphWrapperSkeleton<GraphWrapper>& _G) :   |    265       NodeMap(const GraphWrapper<Graph>& _G) :   | 
|    273 	GraphWrapper::NodeMap<T>(_G.gw) { } |    266 	Graph::NodeMap<T>(*(_G.graph)) { } | 
|    274       NodeMap(const GraphWrapperSkeleton<GraphWrapper>& _G, T a) :  |    267       NodeMap(const GraphWrapper<Graph>& _G, T a) :  | 
|    275 	GraphWrapper::NodeMap<T>(_G.gw, a) { } |    268 	Graph::NodeMap<T>(*(_G.graph), a) { } | 
|    276     }; |    269     }; | 
|    277  |    270  | 
|    278     template<typename T> class EdgeMap : public GraphWrapper::EdgeMap<T> {  |    271     template<typename T> class EdgeMap : public Graph::EdgeMap<T> {  | 
|    279     public: |    272     public: | 
|    280       EdgeMap(const GraphWrapperSkeleton<GraphWrapper>& _G) :   |    273       EdgeMap(const GraphWrapper<Graph>& _G) :   | 
|    281 	GraphWrapper::EdgeMap<T>(_G.gw) { } |    274 	Graph::EdgeMap<T>(*(_G.graph)) { } | 
|    282       EdgeMap(const GraphWrapperSkeleton<GraphWrapper>& _G, T a) :  |    275       EdgeMap(const GraphWrapper<Graph>& _G, T a) :  | 
|    283 	GraphWrapper::EdgeMap<T>(_G.gw, a) { } |    276 	Graph::EdgeMap<T>(*(_G.graph), a) { } | 
|    284     }; |         | 
|    285   }; |         | 
|    286  |         | 
|    287   template<typename GraphWrapper> |         | 
|    288   class GraphWrapperSkeleton1 { |         | 
|    289   protected: |         | 
|    290     GraphWrapper* g; |         | 
|    291    |         | 
|    292   public: |         | 
|    293     //typedef typename GraphWrapper::BaseGraph BaseGraph; |         | 
|    294  |         | 
|    295 //     typedef typename GraphWrapper::Node Node; |         | 
|    296 //     typedef typename GraphWrapper::NodeIt NodeIt; |         | 
|    297  |         | 
|    298 //     typedef typename GraphWrapper::Edge Edge; |         | 
|    299 //     typedef typename GraphWrapper::OutEdgeIt OutEdgeIt; |         | 
|    300 //     typedef typename GraphWrapper::InEdgeIt InEdgeIt; |         | 
|    301 //     //typedef typename GraphWrapper::SymEdgeIt SymEdgeIt; |         | 
|    302 //     typedef typename GraphWrapper::EdgeIt EdgeIt; |         | 
|    303  |         | 
|    304     typedef typename GraphWrapper::Node Node; |         | 
|    305     class NodeIt : public GraphWrapper::NodeIt {  |         | 
|    306     public: |         | 
|    307       NodeIt() { } |         | 
|    308       NodeIt(const typename GraphWrapper::NodeIt& n) :  |         | 
|    309 	GraphWrapper::NodeIt(n) { } |         | 
|    310       NodeIt(const Invalid& i) : GraphWrapper::NodeIt(i) { } |         | 
|    311       NodeIt(const GraphWrapperSkeleton1<GraphWrapper>& _G) :  |         | 
|    312 	GraphWrapper::NodeIt(*(_G.g)) { } |         | 
|    313     }; |         | 
|    314     typedef typename GraphWrapper::Edge Edge; |         | 
|    315     //typedef typename GraphWrapper::OutEdgeIt OutEdgeIt; |         | 
|    316     class OutEdgeIt : public GraphWrapper::OutEdgeIt {  |         | 
|    317     public: |         | 
|    318       OutEdgeIt() { } |         | 
|    319       OutEdgeIt(const typename GraphWrapper::OutEdgeIt& e) :  |         | 
|    320 	GraphWrapper::OutEdgeIt(e) { } |         | 
|    321       OutEdgeIt(const Invalid& i) : GraphWrapper::OutEdgeIt(i) { } |         | 
|    322       OutEdgeIt(const GraphWrapperSkeleton1<GraphWrapper>& _G, const Node& n) :  |         | 
|    323 	GraphWrapper::OutEdgeIt(*(_G.g), n) { } |         | 
|    324     }; |         | 
|    325     //typedef typename GraphWrapper::InEdgeIt InEdgeIt; |         | 
|    326     class InEdgeIt : public GraphWrapper::InEdgeIt {  |         | 
|    327     public: |         | 
|    328       InEdgeIt() { } |         | 
|    329       InEdgeIt(const typename GraphWrapper::InEdgeIt& e) :  |         | 
|    330 	GraphWrapper::InEdgeIt(e) { } |         | 
|    331       InEdgeIt(const Invalid& i) : GraphWrapper::InEdgeIt(i) { } |         | 
|    332       InEdgeIt(const GraphWrapperSkeleton1<GraphWrapper>& _G, const Node& n) :  |         | 
|    333 	GraphWrapper::InEdgeIt(*(_G.g), n) { } |         | 
|    334     }; |         | 
|    335     //typedef typename GraphWrapper::SymEdgeIt SymEdgeIt; |         | 
|    336     //typedef typename GraphWrapper::EdgeIt EdgeIt; |         | 
|    337     class EdgeIt : public GraphWrapper::EdgeIt {  |         | 
|    338     public: |         | 
|    339       EdgeIt() { } |         | 
|    340       EdgeIt(const typename GraphWrapper::EdgeIt& e) :  |         | 
|    341 	GraphWrapper::EdgeIt(e) { } |         | 
|    342       EdgeIt(const Invalid& i) : GraphWrapper::EdgeIt(i) { } |         | 
|    343       EdgeIt(const GraphWrapperSkeleton1<GraphWrapper>& _G) :  |         | 
|    344 	GraphWrapper::EdgeIt(*(_G.g)) { } |         | 
|    345     }; |         | 
|    346  |         | 
|    347  |         | 
|    348     //GraphWrapperSkeleton() : gw() { } |         | 
|    349     GraphWrapperSkeleton1(GraphWrapper& _gw) : g(&_gw) { } |         | 
|    350  |         | 
|    351     //void setGraph(BaseGraph& _graph) { gw.setGraph(_graph); } |         | 
|    352     //BaseGraph& getGraph() const { return gw.getGraph(); } |         | 
|    353      |         | 
|    354     template<typename I> I& first(I& i) const {        |         | 
|    355       i=I(*this); |         | 
|    356       return i; |         | 
|    357     } |         | 
|    358     template<typename I, typename P> I& first(I& i, const P& p) const {  |         | 
|    359       i=I(*this, p); |         | 
|    360       return i;  |         | 
|    361     } |         | 
|    362      |         | 
|    363 //    template<typename I> I getNext(const I& i) const { return gw.getNext(i); } |         | 
|    364     template<typename I> I& next(I &i) const { g->next(i); return i; }     |         | 
|    365  |         | 
|    366     template< typename It > It first() const {  |         | 
|    367       It e; this->first(e); return e; } |         | 
|    368  |         | 
|    369     template< typename It > It first(const Node& v) const {  |         | 
|    370       It e; this->first(e, v); return e; } |         | 
|    371  |         | 
|    372     Node head(const Edge& e) const { return g->head(e); } |         | 
|    373     Node tail(const Edge& e) const { return g->tail(e); } |         | 
|    374  |         | 
|    375     template<typename I> bool valid(const I& i) const { return g->valid(i); } |         | 
|    376    |         | 
|    377     //template<typename I> void setInvalid(const I &i); |         | 
|    378     //{ return graph->setInvalid(i); } |         | 
|    379  |         | 
|    380     int nodeNum() const { return g->nodeNum(); } |         | 
|    381     int edgeNum() const { return g->edgeNum(); } |         | 
|    382    |         | 
|    383     template<typename I> Node aNode(const I& e) const { return g->aNode(e); } |         | 
|    384     template<typename I> Node bNode(const I& e) const { return g->bNode(e); } |         | 
|    385    |         | 
|    386     Node addNode() const { return g->addNode(); } |         | 
|    387     Edge addEdge(const Node& tail, const Node& head) const {  |         | 
|    388       return g->addEdge(tail, head); } |         | 
|    389    |         | 
|    390     template<typename I> void erase(const I& i) const { g->erase(i); } |         | 
|    391    |         | 
|    392     void clear() const { g->clear(); } |         | 
|    393      |         | 
|    394     template<typename T> class NodeMap : public GraphWrapper::NodeMap<T> {  |         | 
|    395     public: |         | 
|    396       NodeMap(const GraphWrapperSkeleton1<GraphWrapper>& _G) :   |         | 
|    397 	GraphWrapper::NodeMap<T>(*(_G.g)) { } |         | 
|    398       NodeMap(const GraphWrapperSkeleton1<GraphWrapper>& _G, T a) :  |         | 
|    399 	GraphWrapper::NodeMap<T>(*(_G.g), a) { } |         | 
|    400     }; |         | 
|    401  |         | 
|    402     template<typename T> class EdgeMap : public GraphWrapper::EdgeMap<T> {  |         | 
|    403     public: |         | 
|    404       EdgeMap(const GraphWrapperSkeleton1<GraphWrapper>& _G) :   |         | 
|    405 	GraphWrapper::EdgeMap<T>(*(_G.g)) { } |         | 
|    406       EdgeMap(const GraphWrapperSkeleton1<GraphWrapper>& _G, T a) :  |         | 
|    407 	GraphWrapper::EdgeMap<T>(*(_G.g), a) { } |         | 
|    408     }; |    277     }; | 
|    409   }; |    278   }; | 
|    410  |    279  | 
|    411  |    280  | 
|    412 //   template<typename Graph> |    281 //   template<typename Graph> | 
|    487 //       EdgeMap(const RevGraphWrapper<Graph>& _G, T a) :  |    356 //       EdgeMap(const RevGraphWrapper<Graph>& _G, T a) :  | 
|    488 // 	Graph::EdgeMap<T>(_G.getGraph(), a) { } |    357 // 	Graph::EdgeMap<T>(_G.getGraph(), a) { } | 
|    489 //     }; |    358 //     }; | 
|    490 //   }; |    359 //   }; | 
|    491  |    360  | 
|    492 //   template<typename /*Graph*/GraphWrapper |    361  | 
|    493 //   /*=typename GraphWrapperSkeleton< TrivGraphWrapper<Graph>*/ > |    362   template<typename Graph> | 
|    494 //   class RevGraphWrapper :  |    363   class RevGraphWrapper : public GraphWrapper<Graph> { | 
|    495 //     public GraphWrapper/*GraphWrapperSkeleton< TrivGraphWrapper<Graph> >*/ { |         | 
|    496 //   protected: |         | 
|    497 //     //Graph* graph; |         | 
|    498      |         | 
|    499 //   public: |         | 
|    500 //     //typedef Graph BaseGraph; |         | 
|    501  |         | 
|    502 //     //typedef typename Graph::Node Node;     |         | 
|    503 //     //typedef typename Graph::NodeIt NodeIt; |         | 
|    504    |         | 
|    505 //     //typedef typename Graph::Edge Edge; |         | 
|    506 //     typedef typename GraphWrapper/*typename GraphWrapperSkeleton< TrivGraphWrapper<Graph> >*/::OutEdgeIt InEdgeIt; |         | 
|    507 //     typedef typename GraphWrapper/*typename GraphWrapperSkeleton< TrivGraphWrapper<Graph> >*/::InEdgeIt OutEdgeIt; |         | 
|    508 //     //typedef typename Graph::SymEdgeIt SymEdgeIt; |         | 
|    509 //     //typedef typename Graph::EdgeIt EdgeIt; |         | 
|    510  |         | 
|    511 //     //RevGraphWrapper() : graph(0) { } |         | 
|    512 //     RevGraphWrapper(GraphWrapper _gw/*BaseGraph& _graph*/) : GraphWrapper/*GraphWrapperSkeleton< TrivGraphWrapper<Graph> >*/(_gw/*TrivGraphWrapper<Graph>(_graph)*/) { } |         | 
|    513      |         | 
|    514 //     //void setGraph(Graph& _graph) { graph = &_graph; } |         | 
|    515 //     //Graph& getGraph() const { return (*graph); } |         | 
|    516      |         | 
|    517 //     //template<typename I> I& first(I& i) const { return graph->first(i); } |         | 
|    518 //     //template<typename I, typename P> I& first(I& i, const P& p) const {  |         | 
|    519 //     //  return graph->first(i, p); } |         | 
|    520  |         | 
|    521 //     //template<typename I> I getNext(const I& i) const {  |         | 
|    522 //     //  return graph->getNext(i); } |         | 
|    523 //     //template<typename I> I& next(I &i) const { return graph->next(i); }     |         | 
|    524  |         | 
|    525 //     //template< typename It > It first() const {  |         | 
|    526 //     //  It e; first(e); return e; } |         | 
|    527  |         | 
|    528 //     //template< typename It > It first(const Node& v) const {  |         | 
|    529 //     //  It e; first(e, v); return e; } |         | 
|    530  |         | 
|    531 //     //Node head(const Edge& e) const { return graph->tail(e); } |         | 
|    532 //     //Node tail(const Edge& e) const { return graph->head(e); } |         | 
|    533    |         | 
|    534 //     //template<typename I> bool valid(const I& i) const  |         | 
|    535 //     //  { return graph->valid(i); } |         | 
|    536    |         | 
|    537 //     //template<typename I> void setInvalid(const I &i); |         | 
|    538 //     //{ return graph->setInvalid(i); } |         | 
|    539    |         | 
|    540 //     //template<typename I> Node aNode(const I& e) const {  |         | 
|    541 //     //  return graph->aNode(e); } |         | 
|    542 //     //template<typename I> Node bNode(const I& e) const {  |         | 
|    543 //     //  return graph->bNode(e); } |         | 
|    544  |         | 
|    545 //     //Node addNode() const { return graph->addNode(); } |         | 
|    546 //     //Edge addEdge(const Node& tail, const Node& head) const {  |         | 
|    547 //     //  return graph->addEdge(tail, head); } |         | 
|    548    |         | 
|    549 //     //int nodeNum() const { return graph->nodeNum(); } |         | 
|    550 //     //int edgeNum() const { return graph->edgeNum(); } |         | 
|    551    |         | 
|    552 //     //template<typename I> void erase(const I& i) const { graph->erase(i); } |         | 
|    553    |         | 
|    554 //     //void clear() const { graph->clear(); } |         | 
|    555  |         | 
|    556 //     template<typename T> class NodeMap :  |         | 
|    557 //       public GraphWrapper/*Skeleton< TrivGraphWrapper<Graph> >*/::NodeMap<T>  |         | 
|    558 //     {  |         | 
|    559 //     public: |         | 
|    560 //       NodeMap(const RevGraphWrapper<GraphWrapper>& _gw) :  |         | 
|    561 // 	GraphWrapper/*Skeleton< TrivGraphWrapper<Graph> >*/::NodeMap<T>(_gw) { } |         | 
|    562 //       NodeMap(const RevGraphWrapper<GraphWrapper>& _gw, T a) :  |         | 
|    563 // 	GraphWrapper/*Skeleton< TrivGraphWrapper<Graph> >*/::NodeMap<T>(_gw, a) { } |         | 
|    564 //     }; |         | 
|    565      |         | 
|    566 //     template<typename T> class EdgeMap :  |         | 
|    567 //       public GraphWrapper/*Skeleton< TrivGraphWrapper<Graph> >*/::EdgeMap<T> {  |         | 
|    568 //     public: |         | 
|    569 //       EdgeMap(const RevGraphWrapper<GraphWrapper>& _gw) :  |         | 
|    570 // 	GraphWrapper/*Skeleton< TrivGraphWrapper<Graph> >*/::EdgeMap<T>(_gw) { } |         | 
|    571 //       EdgeMap(const RevGraphWrapper<GraphWrapper>& _gw, T a) :  |         | 
|    572 // 	GraphWrapper/*Skeleton< TrivGraphWrapper<Graph> >*/::EdgeMap<T>(_gw, a) { } |         | 
|    573 //     }; |         | 
|    574 //   }; |         | 
|    575  |         | 
|    576   template<typename GraphWrapper> |         | 
|    577   class RevGraphWrapper : public GraphWrapperSkeleton1<GraphWrapper> { |         | 
|    578   public: |    364   public: | 
|    579     typedef typename GraphWrapperSkeleton1<GraphWrapper>::Node Node; |    365     typedef typename GraphWrapper<Graph>::Node Node; | 
|    580     typedef typename GraphWrapperSkeleton1<GraphWrapper>::Edge Edge; |    366     typedef typename GraphWrapper<Graph>::Edge Edge; | 
|    581     //FIXME  |    367     //FIXME  | 
|    582     //If GraphWrapper::OutEdgeIt is not defined |    368     //If Graph::OutEdgeIt is not defined | 
|    583     //and we do not want to use RevGraphWrapper::InEdgeIt, |    369     //and we do not want to use RevGraphWrapper::InEdgeIt, | 
|    584     //this won't work, because of typedef |    370     //this won't work, because of typedef | 
|    585     //OR |    371     //OR | 
|    586     //graphs have to define their non-existing iterators to void |    372     //graphs have to define their non-existing iterators to void | 
|    587     //Unfortunately all the typedefs are instantiated in templates,  |    373     //Unfortunately all the typedefs are instantiated in templates,  | 
|    588     //unlike other stuff |    374     //unlike other stuff | 
|    589     typedef typename GraphWrapperSkeleton1<GraphWrapper>::OutEdgeIt InEdgeIt; |    375     typedef typename GraphWrapper<Graph>::OutEdgeIt InEdgeIt; | 
|    590     typedef typename GraphWrapperSkeleton1<GraphWrapper>::InEdgeIt OutEdgeIt; |    376     typedef typename GraphWrapper<Graph>::InEdgeIt OutEdgeIt; | 
|    591  |    377  | 
|    592     RevGraphWrapper(GraphWrapper& _gw) :  |    378 //     RevGraphWrapper() : GraphWrapper<Graph>() { } | 
|    593       GraphWrapperSkeleton1<GraphWrapper>(_gw) { }   |    379     RevGraphWrapper(Graph& _graph) : GraphWrapper<Graph>(_graph) { }   | 
|    594  |    380  | 
|    595     Node head(const Edge& e) const  |    381     Node head(const Edge& e) const  | 
|    596       { return GraphWrapperSkeleton1<GraphWrapper>::tail(e); } |    382       { return GraphWrapper<Graph>::tail(e); } | 
|    597     Node tail(const Edge& e) const  |    383     Node tail(const Edge& e) const  | 
|    598       { return GraphWrapperSkeleton1<GraphWrapper>::head(e); } |    384       { return GraphWrapper<Graph>::head(e); } | 
|    599   }; |    385   }; | 
|    600  |    386  | 
|    601   //Subgraph on the same node-set and partial edge-set |    387   //Subgraph on the same node-set and partial edge-set | 
|    602   template<typename GraphWrapper, typename EdgeFilterMap> |    388   template<typename Graph, typename EdgeFilterMap> | 
|    603   class SubGraphWrapper : public GraphWrapperSkeleton1<GraphWrapper> { |    389   class SubGraphWrapper : public GraphWrapper<Graph> { | 
|    604   protected: |    390   protected: | 
|    605     EdgeFilterMap* filter_map; |    391     EdgeFilterMap* filter_map; | 
|    606   public: |    392   public: | 
|    607     typedef typename GraphWrapperSkeleton1<GraphWrapper>::Node Node; |    393     typedef typename GraphWrapper<Graph>::Node Node; | 
|    608     typedef typename GraphWrapperSkeleton1<GraphWrapper>::NodeIt NodeIt; |    394     typedef typename GraphWrapper<Graph>::NodeIt NodeIt; | 
|    609     typedef typename GraphWrapperSkeleton1<GraphWrapper>::Edge Edge; |    395     typedef typename GraphWrapper<Graph>::Edge Edge; | 
|    610     typedef typename GraphWrapperSkeleton1<GraphWrapper>::EdgeIt EdgeIt; |    396     typedef typename GraphWrapper<Graph>::EdgeIt EdgeIt; | 
|    611     typedef typename GraphWrapperSkeleton1<GraphWrapper>::InEdgeIt InEdgeIt; |    397     typedef typename GraphWrapper<Graph>::InEdgeIt InEdgeIt; | 
|    612     typedef typename GraphWrapperSkeleton1<GraphWrapper>::OutEdgeIt OutEdgeIt; |    398     typedef typename GraphWrapper<Graph>::OutEdgeIt OutEdgeIt; | 
|    613  |    399  | 
|    614     SubGraphWrapper(GraphWrapper& _gw, EdgeFilterMap& _filter_map) :  |    400 //     SubGraphWrapper() : GraphWrapper<Graph>(), filter_map(0) { } | 
|    615       GraphWrapperSkeleton1<GraphWrapper>(_gw), filter_map(&_filter_map) { }   |    401     SubGraphWrapper(Graph& _graph, EdgeFilterMap& _filter_map) :  | 
|         |    402       GraphWrapper<Graph>(_graph), filter_map(&_filter_map) { }   | 
|    616  |    403  | 
|    617     template<typename I> I& first(I& i) const {  |    404     template<typename I> I& first(I& i) const {  | 
|    618       g->first(i);  |    405       graph->first(i);  | 
|    619       while (g->valid(i) && !filter_map->get(i)) { g->next(i); } |    406       while (graph->valid(i) && !filter_map->get(i)) { graph->next(i); } | 
|    620       return i; |    407       return i; | 
|    621     } |    408     } | 
|    622     template<typename I, typename P> I& first(I& i, const P& p) const {  |    409     template<typename I, typename P> I& first(I& i, const P& p) const {  | 
|    623       g->first(i, p);  |    410       graph->first(i, p);  | 
|    624       while (g->valid(i) && !filter_map->get(i)) { g->next(i); } |    411       while (graph->valid(i) && !filter_map->get(i)) { graph->next(i); } | 
|    625       return i; |    412       return i; | 
|    626     } |    413     } | 
|    627      |    414      | 
|    628     //template<typename I> I getNext(const I& i) const {  |    415     //template<typename I> I getNext(const I& i) const {  | 
|    629     //  return gw.getNext(i);  |    416     //  return gw.getNext(i);  | 
|    630     //} |    417     //} | 
|    631     template<typename I> I& next(I &i) const {  |    418     template<typename I> I& next(I &i) const {  | 
|    632       g->next(i);  |    419       graph->next(i);  | 
|    633       while (g->valid(i) && !filter_map->get(i)) { g->next(i); } |    420       while (graph->valid(i) && !filter_map->get(i)) { graph->next(i); } | 
|    634       return i; |    421       return i; | 
|    635     } |    422     } | 
|    636      |    423      | 
|    637     template< typename It > It first() const {  |    424     template< typename It > It first() const {  | 
|    638       It e; this->first(e); return e; } |    425       It e; this->first(e); return e; } | 
|    864 	//return (u.out_or_in || u.in!=v.in); |    633 	//return (u.out_or_in || u.in!=v.in); | 
|    865       }  |    634       }  | 
|    866     }; |    635     }; | 
|    867  |    636  | 
|    868     class OutEdgeIt : public Edge { |    637     class OutEdgeIt : public Edge { | 
|    869       friend class UndirGraphWrapper<GraphWrapper>; |    638       friend class UndirGraphWrapper<Graph>; | 
|    870     public: |    639     public: | 
|    871       OutEdgeIt() : Edge() { } |    640       OutEdgeIt() : Edge() { } | 
|    872       OutEdgeIt(const Invalid& i) : Edge(i) { } |    641       OutEdgeIt(const Invalid& i) : Edge(i) { } | 
|    873       OutEdgeIt(const UndirGraphWrapper<GraphWrapper>& _G, const Node& n)  |    642       OutEdgeIt(const UndirGraphWrapper<Graph>& _G, const Node& n)  | 
|    874 	: Edge() {  |    643 	: Edge() {  | 
|    875 	out_or_in=true; _G.g->first(out, n); |    644 	out_or_in=true; _G.graph->first(out, n); | 
|    876 	if (!(_G.g->valid(out))) { out_or_in=false; _G.g->first(in, n);	} |    645 	if (!(_G.graph->valid(out))) { out_or_in=false; _G.graph->first(in, n);	} | 
|    877       } |    646       } | 
|    878     }; |    647     }; | 
|    879  |    648  | 
|    880     typedef OutEdgeIt InEdgeIt;  |    649     typedef OutEdgeIt InEdgeIt;  | 
|    881  |    650  | 
|    882     class EdgeIt : public Edge { |    651     class EdgeIt : public Edge { | 
|    883       friend class UndirGraphWrapper<GraphWrapper>; |    652       friend class UndirGraphWrapper<Graph>; | 
|    884     protected: |    653     protected: | 
|    885       NodeIt v; |    654       NodeIt v; | 
|    886     public: |    655     public: | 
|    887       EdgeIt() : Edge() { } |    656       EdgeIt() : Edge() { } | 
|    888       EdgeIt(const Invalid& i) : Edge(i) { } |    657       EdgeIt(const Invalid& i) : Edge(i) { } | 
|    889       EdgeIt(const UndirGraphWrapper<GraphWrapper>& _G)  |    658       EdgeIt(const UndirGraphWrapper<Graph>& _G)  | 
|    890 	: Edge() {  |    659 	: Edge() {  | 
|    891 	out_or_in=true; |    660 	out_or_in=true; | 
|    892 	//Node v; |    661 	//Node v; | 
|    893 	_G.first(v); |    662 	_G.first(v); | 
|    894 	if (_G.valid(v)) _G.g->first(out); else out=INVALID; |    663 	if (_G.valid(v)) _G.graph->first(out); else out=INVALID; | 
|    895 	while (_G.valid(v) && !_G.g->valid(out)) {  |    664 	while (_G.valid(v) && !_G.graph->valid(out)) {  | 
|    896 	  _G.g->next(v);  |    665 	  _G.graph->next(v);  | 
|    897 	  if (_G.valid(v)) _G.g->first(out);  |    666 	  if (_G.valid(v)) _G.graph->first(out);  | 
|    898 	} |    667 	} | 
|    899       } |    668       } | 
|    900     }; |    669     }; | 
|    901  |    670  | 
|    902     OutEdgeIt& first(OutEdgeIt& e, const Node& n) const { |    671     OutEdgeIt& first(OutEdgeIt& e, const Node& n) const { | 
|    903       e.out_or_in=true; g->first(e.out, n); |    672       e.out_or_in=true; graph->first(e.out, n); | 
|    904       if (!(g->valid(e.out))) { e.out_or_in=false; g->first(e.in, n); } |    673       if (!(graph->valid(e.out))) { e.out_or_in=false; graph->first(e.in, n); } | 
|    905       return e; |    674       return e; | 
|    906     } |    675     } | 
|    907  |    676  | 
|    908     EdgeIt& first(EdgeIt& e) const { |    677     EdgeIt& first(EdgeIt& e) const { | 
|    909       e.out_or_in=true; |    678       e.out_or_in=true; | 
|    910       //NodeIt v; |    679       //NodeIt v; | 
|    911       first(e.v); |    680       first(e.v); | 
|    912       if (valid(e.v)) g->first(e.out, e.v); else e.out=INVALID; |    681       if (valid(e.v)) graph->first(e.out, e.v); else e.out=INVALID; | 
|    913       while (valid(e.v) && !g->valid(e.out)) {  |    682       while (valid(e.v) && !graph->valid(e.out)) {  | 
|    914 	g->next(e.v);  |    683 	graph->next(e.v);  | 
|    915 	if (valid(e.v)) g->first(e.out, e.v);  |    684 	if (valid(e.v)) graph->first(e.out, e.v);  | 
|    916       } |    685       } | 
|    917       return e; |    686       return e; | 
|    918     } |    687     } | 
|    919  |    688  | 
|    920     template<typename I> I& first(I& i) const { g->first(i); return i; } |    689     template<typename I> I& first(I& i) const { graph->first(i); return i; } | 
|    921     template<typename I, typename P> I& first(I& i, const P& p) const {  |    690     template<typename I, typename P> I& first(I& i, const P& p) const {  | 
|    922       g->first(i, p); return i; } |    691       graph->first(i, p); return i; } | 
|    923  |    692  | 
|    924     OutEdgeIt& next(OutEdgeIt& e) const { |    693     OutEdgeIt& next(OutEdgeIt& e) const { | 
|    925       if (e.out_or_in) { |    694       if (e.out_or_in) { | 
|    926 	Node n=g->tail(e.out); |    695 	Node n=graph->tail(e.out); | 
|    927 	g->next(e.out); |    696 	graph->next(e.out); | 
|    928 	if (!g->valid(e.out)) { e.out_or_in=false; g->first(e.in, n); } |    697 	if (!graph->valid(e.out)) { e.out_or_in=false; graph->first(e.in, n); } | 
|    929       } else { |    698       } else { | 
|    930 	g->next(e.in); |    699 	graph->next(e.in); | 
|    931       } |    700       } | 
|    932       return e; |    701       return e; | 
|    933     } |    702     } | 
|    934  |    703  | 
|    935     EdgeIt& next(EdgeIt& e) const { |    704     EdgeIt& next(EdgeIt& e) const { | 
|    936       //NodeIt v=tail(e); |    705       //NodeIt v=tail(e); | 
|    937       g->next(e.out); |    706       graph->next(e.out); | 
|    938       while (valid(e.v) && !g->valid(e.out)) {  |    707       while (valid(e.v) && !graph->valid(e.out)) {  | 
|    939 	next(e.v);  |    708 	next(e.v);  | 
|    940 	if (valid(e.v)) g->first(e.out, e.v);  |    709 	if (valid(e.v)) graph->first(e.out, e.v);  | 
|    941       } |    710       } | 
|    942       return e; |    711       return e; | 
|    943     } |    712     } | 
|    944  |    713  | 
|    945     template<typename I> I& next(I &i) const { return g->next(i); }     |    714     template<typename I> I& next(I &i) const { return graph->next(i); }     | 
|    946 //    template<typename I> I getNext(const I& i) const { return gw.getNext(i); } |    715 //    template<typename I> I getNext(const I& i) const { return gw.getNext(i); } | 
|    947  |    716  | 
|    948     template< typename It > It first() const {  |    717     template< typename It > It first() const {  | 
|    949       It e; first(e); return e; } |    718       It e; this->first(e); return e; } | 
|    950  |    719  | 
|    951     template< typename It > It first(const Node& v) const {  |    720     template< typename It > It first(const Node& v) const {  | 
|    952       It e; first(e, v); return e; } |    721       It e; this->first(e, v); return e; } | 
|    953  |    722  | 
|    954 //    Node head(const Edge& e) const { return gw.head(e); } |    723 //    Node head(const Edge& e) const { return gw.head(e); } | 
|    955 //    Node tail(const Edge& e) const { return gw.tail(e); } |    724 //    Node tail(const Edge& e) const { return gw.tail(e); } | 
|    956  |    725  | 
|    957 //    template<typename I> bool valid(const I& i) const  |    726 //    template<typename I> bool valid(const I& i) const  | 
|   1227 // 	} |    985 // 	} | 
|   1228 // 	return *this; |    986 // 	return *this; | 
|   1229 //       } |    987 //       } | 
|   1230     }; |    988     }; | 
|   1231  |    989  | 
|   1232     NodeIt& first(NodeIt& v) const { g->first(v); return v; } |    990     NodeIt& first(NodeIt& v) const { graph->first(v); return v; } | 
|   1233     OutEdgeIt& first(OutEdgeIt& e, Node v) const {  |    991     OutEdgeIt& first(OutEdgeIt& e, Node v) const {  | 
|   1234       e=OutEdgeIt(*this, v);  |    992       e=OutEdgeIt(*this, v);  | 
|   1235       return e; |    993       return e; | 
|   1236     } |    994     } | 
|   1237     EdgeIt& first(EdgeIt& e) const {  |    995     EdgeIt& first(EdgeIt& e) const {  | 
|   1238       e=EdgeIt(*this);  |    996       e=EdgeIt(*this);  | 
|   1239       return e; |    997       return e; | 
|   1240     } |    998     } | 
|   1241     |    999     | 
|   1242     NodeIt& next(NodeIt& n) const { return g->next(n); } |   1000     NodeIt& next(NodeIt& n) const { return graph->next(n); } | 
|   1243  |   1001  | 
|   1244     OutEdgeIt& next(OutEdgeIt& e) const {  |   1002     OutEdgeIt& next(OutEdgeIt& e) const {  | 
|   1245       if (e.out_or_in) { |   1003       if (e.out_or_in) { | 
|   1246 	Node v=g->aNode(e.out); |   1004 	Node v=graph->aNode(e.out); | 
|   1247 	g->next(e.out); |   1005 	graph->next(e.out); | 
|   1248 	while( g->valid(e.out) && !(resCap(e.out)>0) ) { g->next(e.out); } |   1006 	while( graph->valid(e.out) && !(resCap(e.out)>0) ) { graph->next(e.out); } | 
|   1249 	if (!g->valid(e.out)) { |   1007 	if (!graph->valid(e.out)) { | 
|   1250 	  e.out_or_in=0; |   1008 	  e.out_or_in=0; | 
|   1251 	  g->first(e.in, v);  |   1009 	  graph->first(e.in, v);  | 
|   1252 	  while( g->valid(e.in) && !(resCap(e.in)>0) ) { g->next(e.in); } |   1010 	  while( graph->valid(e.in) && !(resCap(e.in)>0) ) { graph->next(e.in); } | 
|   1253 	} |   1011 	} | 
|   1254       } else { |   1012       } else { | 
|   1255 	g->next(e.in); |   1013 	graph->next(e.in); | 
|   1256 	while( g->valid(e.in) && !(resCap(e.in)>0) ) { g->next(e.in); }  |   1014 	while( graph->valid(e.in) && !(resCap(e.in)>0) ) { graph->next(e.in); }  | 
|   1257       } |   1015       } | 
|   1258       return e; |   1016       return e; | 
|   1259     } |   1017     } | 
|   1260  |   1018  | 
|   1261     EdgeIt& next(EdgeIt& e) const {  |   1019     EdgeIt& next(EdgeIt& e) const {  | 
|   1262       if (e.out_or_in) { |   1020       if (e.out_or_in) { | 
|   1263 	g->next(e.out); |   1021 	graph->next(e.out); | 
|   1264 	while (g->valid(e.out) && !(resCap(e.out)>0) ) { g->next(e.out); } |   1022 	while (graph->valid(e.out) && !(resCap(e.out)>0) ) { graph->next(e.out); } | 
|   1265 	  while (g->valid(e.v) && !g->valid(e.out)) {  |   1023 	  while (graph->valid(e.v) && !graph->valid(e.out)) {  | 
|   1266 	    g->next(e.v);  |   1024 	    graph->next(e.v);  | 
|   1267 	    if (g->valid(e.v)) g->first(e.out, e.v);  |   1025 	    if (graph->valid(e.v)) graph->first(e.out, e.v);  | 
|   1268 	    while (g->valid(e.out) && !(resCap(e.out)>0) ) { g->next(e.out); } |   1026 	    while (graph->valid(e.out) && !(resCap(e.out)>0) ) { graph->next(e.out); } | 
|   1269 	  } |   1027 	  } | 
|   1270 	  if (!g->valid(e.out)) { |   1028 	  if (!graph->valid(e.out)) { | 
|   1271 	    e.out_or_in=0; |   1029 	    e.out_or_in=0; | 
|   1272 	    g->first(e.v); |   1030 	    graph->first(e.v); | 
|   1273 	    if (g->valid(e.v)) g->first(e.in, e.v); else e.in=INVALID; |   1031 	    if (graph->valid(e.v)) graph->first(e.in, e.v); else e.in=INVALID; | 
|   1274 	    while (g->valid(e.in) && !(resCap(e.in)>0) ) { g->next(e.in); } |   1032 	    while (graph->valid(e.in) && !(resCap(e.in)>0) ) { graph->next(e.in); } | 
|   1275 	    while (g->valid(e.v) && !g->valid(e.in)) {  |   1033 	    while (graph->valid(e.v) && !graph->valid(e.in)) {  | 
|   1276 	      g->next(e.v);  |   1034 	      graph->next(e.v);  | 
|   1277 	      if (g->valid(e.v)) g->first(e.in, e.v);  |   1035 	      if (graph->valid(e.v)) graph->first(e.in, e.v);  | 
|   1278 	      while (g->valid(e.in) && !(resCap(e.in)>0) ) { g->next(e.in); } |   1036 	      while (graph->valid(e.in) && !(resCap(e.in)>0) ) { graph->next(e.in); } | 
|   1279 	    }   |   1037 	    }   | 
|   1280 	  } |   1038 	  } | 
|   1281 	} else { |   1039 	} else { | 
|   1282 	  g->next(e.in); |   1040 	  graph->next(e.in); | 
|   1283 	  while (g->valid(e.in) && !(resCap(e.in)>0) ) { g->next(e.in); } |   1041 	  while (graph->valid(e.in) && !(resCap(e.in)>0) ) { graph->next(e.in); } | 
|   1284 	  while (g->valid(e.v) && !g->valid(e.in)) {  |   1042 	  while (graph->valid(e.v) && !graph->valid(e.in)) {  | 
|   1285 	    g->next(e.v);  |   1043 	    graph->next(e.v);  | 
|   1286 	    if (g->valid(e.v)) g->first(e.in, e.v);  |   1044 	    if (graph->valid(e.v)) graph->first(e.in, e.v);  | 
|   1287 	    while (g->valid(e.in) && !(resCap(e.in)>0) ) { g->next(e.in); } |   1045 	    while (graph->valid(e.in) && !(resCap(e.in)>0) ) { graph->next(e.in); } | 
|   1288 	  } |   1046 	  } | 
|   1289 	} |   1047 	} | 
|   1290 	return e; |   1048 	return e; | 
|   1291       } |   1049       } | 
|   1292      |   1050      | 
|   1437       OutEdgeIt f=e; |   1193       OutEdgeIt f=e; | 
|   1438       this->next(f); |   1194       this->next(f); | 
|   1439       first_out_edges->set(this->tail(e), f); |   1195       first_out_edges->set(this->tail(e), f); | 
|   1440     } |   1196     } | 
|   1441   }; |   1197   }; | 
|   1442  |         | 
|   1443 //   template<typename Graph, typename Number, typename FlowMap, typename CapacityMap> |         | 
|   1444 //   class ErasingResGraphWrapper : public ResGraphWrapper<Graph, Number, FlowMap, CapacityMap> { |         | 
|   1445 //   protected: |         | 
|   1446 //     ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::NodeMap<typename ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::OutEdgeIt> first_out_edges; |         | 
|   1447 //     //ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::NodeMap<int> dist; |         | 
|   1448 //   public: |         | 
|   1449 //     ErasingResGraphWrapper(const Graph& _G, FlowMap& _flow,  |         | 
|   1450 // 			   const CapacityMap& _capacity) :  |         | 
|   1451 //       ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>(_G, _flow, _capacity),  |         | 
|   1452 //       first_out_edges(*this) /*, dist(*this)*/ {  |         | 
|   1453 //       for(NodeIt n=this->template first<NodeIt>(); this->valid(n); this->next(n)) { |         | 
|   1454 // 	OutEdgeIt e; |         | 
|   1455 // 	ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::first(e, n); |         | 
|   1456 // 	first_out_edges.set(n, e); |         | 
|   1457 //       } |         | 
|   1458 //     } |         | 
|   1459  |         | 
|   1460 //     //void setGraph(Graph& _graph) { graph = &_graph; } |         | 
|   1461 //     //Graph& getGraph() const { return (*graph); } |         | 
|   1462    |         | 
|   1463 //     //TrivGraphWrapper() : graph(0) { } |         | 
|   1464 //     //ErasingResGraphWrapper(Graph& _graph) : graph(&_graph) { } |         | 
|   1465  |         | 
|   1466 //     //typedef Graph BaseGraph; |         | 
|   1467  |         | 
|   1468 //     //typedef typename Graph::Node Node; |         | 
|   1469 //     //typedef typename Graph::NodeIt NodeIt; |         | 
|   1470  |         | 
|   1471 //     //typedef typename Graph::Edge Edge; |         | 
|   1472 //     //typedef typename Graph::OutEdgeIt OutEdgeIt; |         | 
|   1473 //     //typedef typename Graph::InEdgeIt InEdgeIt; |         | 
|   1474 //     //typedef typename Graph::SymEdgeIt SymEdgeIt; |         | 
|   1475 //     //typedef typename Graph::EdgeIt EdgeIt; |         | 
|   1476  |         | 
|   1477 //     typedef typename ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::Node Node; |         | 
|   1478 //     typedef typename ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::NodeIt NodeIt; |         | 
|   1479  |         | 
|   1480 //     typedef typename ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::Edge Edge; |         | 
|   1481 //     typedef typename ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::OutEdgeIt OutEdgeIt; |         | 
|   1482 //     //typedef typename ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::InEdgeIt InEdgeIt; |         | 
|   1483 //     //typedef typename Graph::SymEdgeIt SymEdgeIt; |         | 
|   1484 //     //typedef typename ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::EdgeIt EdgeIt; |         | 
|   1485  |         | 
|   1486 //     NodeIt& first(NodeIt& n) const {  |         | 
|   1487 //       return ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::first(n); |         | 
|   1488 //     } |         | 
|   1489  |         | 
|   1490 //     OutEdgeIt& first(OutEdgeIt& e, const Node& n) const {  |         | 
|   1491 //       e=first_out_edges.get(n); |         | 
|   1492 //       return e; |         | 
|   1493 //     } |         | 
|   1494      |         | 
|   1495 //     //ROSSZ template<typename I> I& first(I& i) const { return first(i); } |         | 
|   1496 //     //ROSSZ template<typename I, typename P> I& first(I& i, const P& p) const {  |         | 
|   1497 //     //  return first(i, p); } |         | 
|   1498      |         | 
|   1499 //     //template<typename I> I getNext(const I& i) const {  |         | 
|   1500 //     //  return gw.getNext(i); } |         | 
|   1501 //     //template<typename I> I& next(I &i) const { return gw.next(i); }     |         | 
|   1502  |         | 
|   1503 //     template< typename It > It first() const {  |         | 
|   1504 //       It e; first(e); return e; } |         | 
|   1505  |         | 
|   1506 //     template< typename It > It first(const Node& v) const {  |         | 
|   1507 //       It e; first(e, v); return e; } |         | 
|   1508  |         | 
|   1509 //     //Node head(const Edge& e) const { return gw.head(e); } |         | 
|   1510 //     //Node tail(const Edge& e) const { return gw.tail(e); } |         | 
|   1511  |         | 
|   1512 //     //template<typename I> bool valid(const I& i) const  |         | 
|   1513 //     //  { return gw.valid(i); } |         | 
|   1514    |         | 
|   1515 //     //int nodeNum() const { return gw.nodeNum(); } |         | 
|   1516 //     //int edgeNum() const { return gw.edgeNum(); } |         | 
|   1517    |         | 
|   1518 //     //template<typename I> Node aNode(const I& e) const {  |         | 
|   1519 //     //  return gw.aNode(e); } |         | 
|   1520 //     //template<typename I> Node bNode(const I& e) const {  |         | 
|   1521 //     //  return gw.bNode(e); } |         | 
|   1522    |         | 
|   1523 //     //Node addNode() const { return gw.addNode(); } |         | 
|   1524 //     //Edge addEdge(const Node& tail, const Node& head) const {  |         | 
|   1525 //     //  return gw.addEdge(tail, head); } |         | 
|   1526    |         | 
|   1527 //     //void erase(const OutEdgeIt& e) { |         | 
|   1528 //     //  first_out_edge(this->tail(e))=e; |         | 
|   1529 //     //} |         | 
|   1530 //     void erase(const Edge& e) { |         | 
|   1531 //       OutEdgeIt f(e); |         | 
|   1532 //       next(f); |         | 
|   1533 //       first_out_edges.set(this->tail(e), f); |         | 
|   1534 //     } |         | 
|   1535 //     //template<typename I> void erase(const I& i) const { gw.erase(i); } |         | 
|   1536    |         | 
|   1537 //     //void clear() const { gw.clear(); } |         | 
|   1538      |         | 
|   1539 //     template<typename T> class NodeMap : public ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::NodeMap<T> {  |         | 
|   1540 //     public: |         | 
|   1541 //       NodeMap(const ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>& _G) :  |         | 
|   1542 // 	ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::NodeMap<T>(_G /*_G.getGraph()*/) { } |         | 
|   1543 //       NodeMap(const ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>& _G, T a) :  |         | 
|   1544 // 	ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::NodeMap<T>(_G /*_G.getGraph()*/, a) { } |         | 
|   1545 //     }; |         | 
|   1546  |         | 
|   1547 //     template<typename T> class EdgeMap : public ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::EdgeMap<T> {  |         | 
|   1548 //     public: |         | 
|   1549 //       EdgeMap(const ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>& _G) :  |         | 
|   1550 // 	ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::EdgeMap<T>(_G /*_G.getGraph()*/) { } |         | 
|   1551 //       EdgeMap(const ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>& _G, T a) :  |         | 
|   1552 // 	ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::EdgeMap<T>(_G /*_G.getGraph()*/, a) { } |         | 
|   1553 //     }; |         | 
|   1554 //   }; |         | 
|   1555  |         | 
|   1556 //   template<typename GraphWrapper>  |         | 
|   1557 //   class FilterGraphWrapper { |         | 
|   1558 //   }; |         | 
|   1559  |         | 
|   1560 //   template<typename Graph, typename Number, typename FlowMap, typename CapacityMap> |         | 
|   1561 //   class FilterGraphWrapper<ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap> > : public ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap> { |         | 
|   1562  |         | 
|   1563 //     //Graph* graph; |         | 
|   1564    |         | 
|   1565 //   public: |         | 
|   1566 //     //typedef Graph BaseGraph; |         | 
|   1567  |         | 
|   1568 //     typedef typename ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::Node Node; |         | 
|   1569 //     typedef typename ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::NodeIt NodeIt; |         | 
|   1570  |         | 
|   1571 //     typedef typename ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::Edge Edge; |         | 
|   1572 //     typedef typename ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::OutEdgeIt OutEdgeIt; |         | 
|   1573 //     //typedef typename ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::InEdgeIt InEdgeIt; |         | 
|   1574 //     //typedef typename Graph::SymEdgeIt SymEdgeIt; |         | 
|   1575 //     typedef typename ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::EdgeIt EdgeIt; |         | 
|   1576  |         | 
|   1577 //     //FilterGraphWrapper<Graph, Number, FlowMap, CapacityMap>::NodeMap<typename ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::OutEdgeIt> first_out_edges; |         | 
|   1578      |         | 
|   1579 //   public: |         | 
|   1580 //     FilterGraphWrapper(const Graph& _G, FlowMap& _flow,  |         | 
|   1581 // 			   const CapacityMap& _capacity) :  |         | 
|   1582 //       ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>(_G, _flow, _capacity), dist(*this, gw.nodeNum()) {  |         | 
|   1583 //     } |         | 
|   1584  |         | 
|   1585 //     OutEdgeIt& first(OutEdgeIt& e, const Node& n) const { |         | 
|   1586 //       ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::first(e, n); |         | 
|   1587 //       while (valid(e) && (dist.get(tail(e))/*+1!=*/>=dist.get(head(e))))  |         | 
|   1588 // 	ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::next(e); |         | 
|   1589 //       return e; |         | 
|   1590 //     } |         | 
|   1591  |         | 
|   1592 //     NodeIt& next(NodeIt& e) const { |         | 
|   1593 //       return ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::next(e); |         | 
|   1594 //     } |         | 
|   1595  |         | 
|   1596 //     OutEdgeIt& next(OutEdgeIt& e) const { |         | 
|   1597 //       ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::next(e); |         | 
|   1598 //       while (valid(e) && (dist.get(tail(e))/*+1!*/>=dist.get(head(e))))  |         | 
|   1599 // 	ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::next(e); |         | 
|   1600 //       return e; |         | 
|   1601 //     } |         | 
|   1602  |         | 
|   1603 //     NodeIt& first(NodeIt& n) const { |         | 
|   1604 //       return ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::first(n); |         | 
|   1605 //     } |         | 
|   1606  |         | 
|   1607 //     void erase(const Edge& e) { |         | 
|   1608 //       OutEdgeIt f(e); |         | 
|   1609 //       ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::next(f); |         | 
|   1610 //       while (valid(f) && (dist.get(tail(f))/*+1!=*/>=dist.get(head(f))))  |         | 
|   1611 // 	ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::next(f); |         | 
|   1612 //       first_out_edges.set(this->tail(e), f); |         | 
|   1613 //     } |         | 
|   1614  |         | 
|   1615 //     //TrivGraphWrapper() : graph(0) { } |         | 
|   1616 //     //TrivGraphWrapper(Graph& _graph) : graph(&_graph) { } |         | 
|   1617  |         | 
|   1618 //     //void setGraph(Graph& _graph) { graph = &_graph; } |         | 
|   1619 //     //Graph& getGraph() const { return (*graph); } |         | 
|   1620      |         | 
|   1621 //     //template<typename I> I& first(I& i) const { return gw.first(i); } |         | 
|   1622 //     //template<typename I, typename P> I& first(I& i, const P& p) const {  |         | 
|   1623 //     //  return gw.first(i, p); } |         | 
|   1624      |         | 
|   1625 //     //template<typename I> I getNext(const I& i) const {  |         | 
|   1626 //     //  return gw.getNext(i); } |         | 
|   1627 //     //template<typename I> I& next(I &i) const { return gw.next(i); }     |         | 
|   1628  |         | 
|   1629 //     template< typename It > It first() const {  |         | 
|   1630 //       It e; first(e); return e; } |         | 
|   1631  |         | 
|   1632 //     template< typename It > It first(const Node& v) const {  |         | 
|   1633 //       It e; first(e, v); return e; } |         | 
|   1634  |         | 
|   1635 //     //Node head(const Edge& e) const { return gw.head(e); } |         | 
|   1636 //     //Node tail(const Edge& e) const { return gw.tail(e); } |         | 
|   1637  |         | 
|   1638 //     //template<typename I> bool valid(const I& i) const  |         | 
|   1639 //     //  { return gw.valid(i); } |         | 
|   1640    |         | 
|   1641 //     //template<typename I> void setInvalid(const I &i); |         | 
|   1642 //     //{ return gw.setInvalid(i); } |         | 
|   1643  |         | 
|   1644 //     //int nodeNum() const { return gw.nodeNum(); } |         | 
|   1645 //     //int edgeNum() const { return gw.edgeNum(); } |         | 
|   1646    |         | 
|   1647 //     //template<typename I> Node aNode(const I& e) const {  |         | 
|   1648 //     //  return gw.aNode(e); } |         | 
|   1649 //     //template<typename I> Node bNode(const I& e) const {  |         | 
|   1650 //     //  return gw.bNode(e); } |         | 
|   1651    |         | 
|   1652 //     //Node addNode() const { return gw.addNode(); } |         | 
|   1653 //     //Edge addEdge(const Node& tail, const Node& head) const {  |         | 
|   1654 //     //  return gw.addEdge(tail, head); } |         | 
|   1655    |         | 
|   1656 //     //template<typename I> void erase(const I& i) const { gw.erase(i); } |         | 
|   1657    |         | 
|   1658 //     //void clear() const { gw.clear(); } |         | 
|   1659      |         | 
|   1660 //     template<typename T> class NodeMap : public ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::NodeMap<T> {  |         | 
|   1661 //     public: |         | 
|   1662 //       NodeMap(const FilterGraphWrapper<ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap> >& _G) :  |         | 
|   1663 // 	ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::NodeMap<T>(_G /*_G.getGraph()*/) { } |         | 
|   1664 //       NodeMap(const FilterGraphWrapper<ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap> >& _G, T a) :  |         | 
|   1665 // 	ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::NodeMap<T>(_G /*_G.getGraph()*/, a) { } |         | 
|   1666 //     }; |         | 
|   1667  |         | 
|   1668 //     template<typename T> class EdgeMap : public ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::EdgeMap<T> {  |         | 
|   1669 //     public: |         | 
|   1670 //       EdgeMap(const FilterGraphWrapper<ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap> >& _G) :  |         | 
|   1671 // 	ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::EdgeMap<T>(_G /*_G.getGraph()*/) { } |         | 
|   1672 //       EdgeMap(const FilterGraphWrapper<ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap> >& _G, T a) :  |         | 
|   1673 // 	ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::EdgeMap<T>(_G /*_G.getGraph()*/, a) { } |         | 
|   1674 //     }; |         | 
|   1675  |         | 
|   1676 //   public: |         | 
|   1677 //     ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::NodeMap<int> dist; |         | 
|   1678  |         | 
|   1679 //   }; |         | 
|   1680  |         | 
|   1681  |         | 
|   1682  |   1198  | 
|   1683 // // FIXME: comparison should be made better!!! |   1199 // // FIXME: comparison should be made better!!! | 
|   1684 //   template<typename Graph, typename T, typename LowerMap, typename FlowMap, typename UpperMap> |   1200 //   template<typename Graph, typename T, typename LowerMap, typename FlowMap, typename UpperMap> | 
|   1685 //   class ResGraphWrapper |   1201 //   class ResGraphWrapper | 
|   1686 //   { |   1202 //   { |