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 //   { |