src/work/marci/graph_wrapper.h
changeset 259 509ba9f136d2
parent 239 3f76d1aa9d37
child 263 f24f276e0b6b
     1.1 --- a/src/work/marci/graph_wrapper.h	Mon Mar 29 11:08:59 2004 +0000
     1.2 +++ b/src/work/marci/graph_wrapper.h	Mon Mar 29 16:00:00 2004 +0000
     1.3 @@ -1,6 +1,6 @@
     1.4  // -*- c++ -*-
     1.5 -#ifndef GRAPH_WRAPPER_H
     1.6 -#define GRAPH_WRAPPER_H
     1.7 +#ifndef HUGO_GRAPH_WRAPPER_H
     1.8 +#define HUGO_GRAPH_WRAPPER_H
     1.9  
    1.10  #include <invalid.h>
    1.11  
    1.12 @@ -770,24 +770,26 @@
    1.13    template<typename Graph, typename Number, typename FlowMap, typename CapacityMap>
    1.14    class ResGraphWrapper {
    1.15    public:
    1.16 -    typedef Graph BaseGraph;
    1.17 +    //typedef Graph BaseGraph;
    1.18      typedef typename Graph::Node Node;
    1.19      typedef typename Graph::NodeIt NodeIt;
    1.20    private:
    1.21      typedef typename Graph::OutEdgeIt OldOutEdgeIt;
    1.22      typedef typename Graph::InEdgeIt OldInEdgeIt;
    1.23    protected:
    1.24 -    const Graph* graph;
    1.25 +    //const Graph* graph;
    1.26 +    typedef TrivGraphWrapper<const Graph> GraphWrapper;
    1.27 +    GraphWrapper gw;
    1.28      FlowMap* flow;
    1.29      const CapacityMap* capacity;
    1.30    public:
    1.31  
    1.32      ResGraphWrapper(const Graph& _G, FlowMap& _flow, 
    1.33  	     const CapacityMap& _capacity) : 
    1.34 -      graph(&_G), flow(&_flow), capacity(&_capacity) { }
    1.35 +      gw(_G), flow(&_flow), capacity(&_capacity) { }
    1.36  
    1.37 -    void setGraph(const Graph& _graph) { graph = &_graph; }
    1.38 -    const Graph& getGraph() const { return (*graph); }
    1.39 +    //void setGraph(const Graph& _graph) { graph = &_graph; }
    1.40 +    //const Graph& getGraph() const { return (*graph); }
    1.41  
    1.42      class Edge; 
    1.43      class OutEdgeIt; 
    1.44 @@ -829,12 +831,12 @@
    1.45        OutEdgeIt(const Invalid& i) : Edge(i) { }
    1.46      private:
    1.47        OutEdgeIt(const ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>& resG, Node v) : Edge() { 
    1.48 -	resG.graph->first(out, v);
    1.49 -	while( resG.graph->valid(out) && !(resG.free(out)>0) ) { resG.graph->next(out); }
    1.50 -	if (!resG.graph->valid(out)) {
    1.51 +	resG.gw.first(out, v);
    1.52 +	while( resG.gw.valid(out) && !(resG.free(out)>0) ) { resG.gw.next(out); }
    1.53 +	if (!resG.gw.valid(out)) {
    1.54  	  out_or_in=0;
    1.55 -	  resG.graph->first(in, v);
    1.56 -	  while( resG.graph->valid(in) && !(resG.free(in)>0) ) { resG.graph->next(in); }
    1.57 +	  resG.gw.first(in, v);
    1.58 +	  while( resG.gw.valid(in) && !(resG.free(in)>0) ) { resG.gw.next(in); }
    1.59  	}
    1.60        }
    1.61  //     public:
    1.62 @@ -864,23 +866,23 @@
    1.63        //EdgeIt(const EdgeIt& e) : Edge(e), v(e.v) { }
    1.64        EdgeIt(const Invalid& i) : Edge(i) { }
    1.65        EdgeIt(const ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>& resG) : Edge() { 
    1.66 -	resG.graph->first(v);
    1.67 -	if (resG.graph->valid(v)) resG.graph->first(out, v); else out=OldOutEdgeIt(INVALID);
    1.68 -	while (resG.graph->valid(out) && !(resG.free(out)>0) ) { resG.graph->next(out); }
    1.69 -	while (resG.graph->valid(v) && !resG.graph->valid(out)) { 
    1.70 -	  resG.graph->next(v); 
    1.71 -	  if (resG.graph->valid(v)) resG.graph->first(out, v); 
    1.72 -	  while (resG.graph->valid(out) && !(resG.free(out)>0) ) { resG.graph->next(out); }
    1.73 +	resG.gw.first(v);
    1.74 +	if (resG.gw.valid(v)) resG.gw.first(out, v); else out=/*OldOutEdgeIt*/(INVALID);
    1.75 +	while (resG.gw.valid(out) && !(resG.free(out)>0) ) { resG.gw.next(out); }
    1.76 +	while (resG.gw.valid(v) && !resG.gw.valid(out)) { 
    1.77 +	  resG.gw.next(v); 
    1.78 +	  if (resG.gw.valid(v)) resG.gw.first(out, v); 
    1.79 +	  while (resG.gw.valid(out) && !(resG.free(out)>0) ) { resG.gw.next(out); }
    1.80  	}
    1.81 -	if (!resG.graph->valid(out)) {
    1.82 +	if (!resG.gw.valid(out)) {
    1.83  	  out_or_in=0;
    1.84 -	  resG.graph->first(v);
    1.85 -	  if (resG.graph->valid(v)) resG.graph->first(in, v); else in=OldInEdgeIt(INVALID);
    1.86 -	  while (resG.graph->valid(in) && !(resG.free(in)>0) ) { resG.graph->next(in); }
    1.87 -	  while (resG.graph->valid(v) && !resG.graph->valid(in)) { 
    1.88 -	    resG.graph->next(v); 
    1.89 -	    if (resG.graph->valid(v)) resG.graph->first(in, v); 
    1.90 -	    while (resG.graph->valid(in) && !(resG.free(in)>0) ) { resG.graph->next(in); }
    1.91 +	  resG.gw.first(v);
    1.92 +	  if (resG.gw.valid(v)) resG.gw.first(in, v); else in=/*OldInEdgeIt*/(INVALID);
    1.93 +	  while (resG.gw.valid(in) && !(resG.free(in)>0) ) { resG.gw.next(in); }
    1.94 +	  while (resG.gw.valid(v) && !resG.gw.valid(in)) { 
    1.95 +	    resG.gw.next(v); 
    1.96 +	    if (resG.gw.valid(v)) resG.gw.first(in, v); 
    1.97 +	    while (resG.gw.valid(in) && !(resG.free(in)>0) ) { resG.gw.next(in); }
    1.98  	  }
    1.99  	}
   1.100        }
   1.101 @@ -917,7 +919,7 @@
   1.102  //       }
   1.103      };
   1.104  
   1.105 -    NodeIt& first(NodeIt& v) const { return graph->first(v); }
   1.106 +    NodeIt& first(NodeIt& v) const { return gw.first(v); }
   1.107      OutEdgeIt& first(OutEdgeIt& e, Node v) const { 
   1.108        e=OutEdgeIt(*this, v); 
   1.109        return e;
   1.110 @@ -927,52 +929,52 @@
   1.111        return e;
   1.112      }
   1.113     
   1.114 -    NodeIt& next(NodeIt& n) const { return graph->next(n); }
   1.115 +    NodeIt& next(NodeIt& n) const { return gw.next(n); }
   1.116  
   1.117      OutEdgeIt& next(OutEdgeIt& e) const { 
   1.118        if (e.out_or_in) {
   1.119 -	Node v=graph->aNode(e.out);
   1.120 -	graph->next(e.out);
   1.121 -	while( graph->valid(e.out) && !(free(e.out)>0) ) { graph->next(e.out); }
   1.122 -	if (!graph->valid(e.out)) {
   1.123 +	Node v=gw.aNode(e.out);
   1.124 +	gw.next(e.out);
   1.125 +	while( gw.valid(e.out) && !(free(e.out)>0) ) { gw.next(e.out); }
   1.126 +	if (!gw.valid(e.out)) {
   1.127  	  e.out_or_in=0;
   1.128 -	  graph->first(e.in, v); 
   1.129 -	  while( graph->valid(e.in) && !(free(e.in)>0) ) { graph->next(e.in); }
   1.130 +	  gw.first(e.in, v); 
   1.131 +	  while( gw.valid(e.in) && !(free(e.in)>0) ) { gw.next(e.in); }
   1.132  	}
   1.133        } else {
   1.134 -	graph->next(e.in);
   1.135 -	while( graph->valid(e.in) && !(free(e.in)>0) ) { graph->next(e.in); } 
   1.136 +	gw.next(e.in);
   1.137 +	while( gw.valid(e.in) && !(free(e.in)>0) ) { gw.next(e.in); } 
   1.138        }
   1.139        return e;
   1.140      }
   1.141  
   1.142      EdgeIt& next(EdgeIt& e) const { 
   1.143        if (e.out_or_in) {
   1.144 -	graph->next(e.out);
   1.145 -	while (graph->valid(e.out) && !(free(e.out)>0) ) { graph->next(e.out); }
   1.146 -	  while (graph->valid(e.v) && !graph->valid(e.out)) { 
   1.147 -	    graph->next(e.v); 
   1.148 -	    if (graph->valid(e.v)) graph->first(e.out, e.v); 
   1.149 -	    while (graph->valid(e.out) && !(free(e.out)>0) ) { graph->next(e.out); }
   1.150 +	gw.next(e.out);
   1.151 +	while (gw.valid(e.out) && !(free(e.out)>0) ) { gw.next(e.out); }
   1.152 +	  while (gw.valid(e.v) && !gw.valid(e.out)) { 
   1.153 +	    gw.next(e.v); 
   1.154 +	    if (gw.valid(e.v)) gw.first(e.out, e.v); 
   1.155 +	    while (gw.valid(e.out) && !(free(e.out)>0) ) { gw.next(e.out); }
   1.156  	  }
   1.157 -	  if (!graph->valid(e.out)) {
   1.158 +	  if (!gw.valid(e.out)) {
   1.159  	    e.out_or_in=0;
   1.160 -	    graph->first(e.v);
   1.161 -	    if (graph->valid(e.v)) graph->first(e.in, e.v); else e.in=OldInEdgeIt(INVALID);
   1.162 -	    while (graph->valid(e.in) && !(free(e.in)>0) ) { graph->next(e.in); }
   1.163 -	    while (graph->valid(e.v) && !graph->valid(e.in)) { 
   1.164 -	      graph->next(e.v); 
   1.165 -	      if (graph->valid(e.v)) graph->first(e.in, e.v); 
   1.166 -	      while (graph->valid(e.in) && !(free(e.in)>0) ) { graph->next(e.in); }
   1.167 +	    gw.first(e.v);
   1.168 +	    if (gw.valid(e.v)) gw.first(e.in, e.v); else e.in=/*OldInEdgeIt*/(INVALID);
   1.169 +	    while (gw.valid(e.in) && !(free(e.in)>0) ) { gw.next(e.in); }
   1.170 +	    while (gw.valid(e.v) && !gw.valid(e.in)) { 
   1.171 +	      gw.next(e.v); 
   1.172 +	      if (gw.valid(e.v)) gw.first(e.in, e.v); 
   1.173 +	      while (gw.valid(e.in) && !(free(e.in)>0) ) { gw.next(e.in); }
   1.174  	    }  
   1.175  	  }
   1.176  	} else {
   1.177 -	  graph->next(e.in);
   1.178 -	  while (graph->valid(e.in) && !(free(e.in)>0) ) { graph->next(e.in); }
   1.179 -	  while (graph->valid(e.v) && !graph->valid(e.in)) { 
   1.180 -	    graph->next(e.v); 
   1.181 -	    if (graph->valid(e.v)) graph->first(e.in, e.v); 
   1.182 -	    while (graph->valid(e.in) && !(free(e.in)>0) ) { graph->next(e.in); }
   1.183 +	  gw.next(e.in);
   1.184 +	  while (gw.valid(e.in) && !(free(e.in)>0) ) { gw.next(e.in); }
   1.185 +	  while (gw.valid(e.v) && !gw.valid(e.in)) { 
   1.186 +	    gw.next(e.v); 
   1.187 +	    if (gw.valid(e.v)) gw.first(e.in, e.v); 
   1.188 +	    while (gw.valid(e.in) && !(free(e.in)>0) ) { gw.next(e.in); }
   1.189  	  }
   1.190  	}
   1.191  	return e;
   1.192 @@ -994,20 +996,20 @@
   1.193      }
   1.194  
   1.195      Node tail(Edge e) const { 
   1.196 -      return ((e.out_or_in) ? graph->aNode(e.out) : graph->aNode(e.in)); }
   1.197 +      return ((e.out_or_in) ? gw.aNode(e.out) : gw.aNode(e.in)); }
   1.198      Node head(Edge e) const { 
   1.199 -      return ((e.out_or_in) ? graph->bNode(e.out) : graph->bNode(e.in)); }
   1.200 +      return ((e.out_or_in) ? gw.bNode(e.out) : gw.bNode(e.in)); }
   1.201  
   1.202      Node aNode(OutEdgeIt e) const { 
   1.203 -      return ((e.out_or_in) ? graph->aNode(e.out) : graph->aNode(e.in)); }
   1.204 +      return ((e.out_or_in) ? gw.aNode(e.out) : gw.aNode(e.in)); }
   1.205      Node bNode(OutEdgeIt e) const { 
   1.206 -      return ((e.out_or_in) ? graph->bNode(e.out) : graph->bNode(e.in)); }
   1.207 +      return ((e.out_or_in) ? gw.bNode(e.out) : gw.bNode(e.in)); }
   1.208  
   1.209 -    int id(Node v) const { return graph->id(v); }
   1.210 +    int id(Node v) const { return gw.id(v); }
   1.211  
   1.212 -    bool valid(Node n) const { return graph->valid(n); }
   1.213 +    bool valid(Node n) const { return gw.valid(n); }
   1.214      bool valid(Edge e) const { 
   1.215 -      return e.out_or_in ? graph->valid(e.out) : graph->valid(e.in); }
   1.216 +      return e.out_or_in ? gw.valid(e.out) : gw.valid(e.in); }
   1.217  
   1.218      void augment(const Edge& e, Number a) const {
   1.219        if (e.out_or_in)  
   1.220 @@ -1031,12 +1033,12 @@
   1.221        return (flow->get(in)); 
   1.222      }
   1.223  
   1.224 -    template<typename T> class NodeMap : public Graph::NodeMap<T> { 
   1.225 +    template<typename T> class NodeMap : public GraphWrapper::NodeMap<T> { 
   1.226      public:
   1.227        NodeMap(const ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>& _G) 
   1.228 -	: Graph::NodeMap<T>(_G.getGraph()) { }
   1.229 +	: GraphWrapper::NodeMap<T>(_G.gw) { }
   1.230        NodeMap(const ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>& _G, 
   1.231 -	      T a) : Graph::NodeMap<T>(_G.getGraph(), a) { }
   1.232 +	      T a) : GraphWrapper::NodeMap<T>(_G.gw, a) { }
   1.233      };
   1.234  
   1.235  //     template <typename T>
   1.236 @@ -1051,10 +1053,10 @@
   1.237  
   1.238      template <typename T>
   1.239      class EdgeMap {
   1.240 -      typename Graph::EdgeMap<T> forward_map, backward_map; 
   1.241 +      typename GraphWrapper::EdgeMap<T> forward_map, backward_map; 
   1.242      public:
   1.243 -      EdgeMap(const ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>& _G) : forward_map(_G.getGraph()), backward_map(_G.getGraph()) { }
   1.244 -      EdgeMap(const ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>& _G, T a) : forward_map(_G.getGraph(), a), backward_map(_G.getGraph(), a) { }
   1.245 +      EdgeMap(const ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>& _G) : forward_map(_G.gw), backward_map(_G.gw) { }
   1.246 +      EdgeMap(const ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>& _G, T a) : forward_map(_G.gw, a), backward_map(_G.gw, a) { }
   1.247        void set(Edge e, T a) { 
   1.248  	if (e.out_or_in) 
   1.249  	  forward_map.set(e.out, a); 
   1.250 @@ -1127,8 +1129,8 @@
   1.251      //  return first(i, p); }
   1.252      
   1.253      //template<typename I> I getNext(const I& i) const { 
   1.254 -    //  return graph->getNext(i); }
   1.255 -    //template<typename I> I& next(I &i) const { return graph->next(i); }    
   1.256 +    //  return gw.getNext(i); }
   1.257 +    //template<typename I> I& next(I &i) const { return gw.next(i); }    
   1.258  
   1.259      template< typename It > It first() const { 
   1.260        It e; first(e); return e; }
   1.261 @@ -1136,23 +1138,23 @@
   1.262      template< typename It > It first(const Node& v) const { 
   1.263        It e; first(e, v); return e; }
   1.264  
   1.265 -    //Node head(const Edge& e) const { return graph->head(e); }
   1.266 -    //Node tail(const Edge& e) const { return graph->tail(e); }
   1.267 +    //Node head(const Edge& e) const { return gw.head(e); }
   1.268 +    //Node tail(const Edge& e) const { return gw.tail(e); }
   1.269  
   1.270      //template<typename I> bool valid(const I& i) const 
   1.271 -    //  { return graph->valid(i); }
   1.272 +    //  { return gw.valid(i); }
   1.273    
   1.274 -    //int nodeNum() const { return graph->nodeNum(); }
   1.275 -    //int edgeNum() const { return graph->edgeNum(); }
   1.276 +    //int nodeNum() const { return gw.nodeNum(); }
   1.277 +    //int edgeNum() const { return gw.edgeNum(); }
   1.278    
   1.279      //template<typename I> Node aNode(const I& e) const { 
   1.280 -    //  return graph->aNode(e); }
   1.281 +    //  return gw.aNode(e); }
   1.282      //template<typename I> Node bNode(const I& e) const { 
   1.283 -    //  return graph->bNode(e); }
   1.284 +    //  return gw.bNode(e); }
   1.285    
   1.286 -    //Node addNode() const { return graph->addNode(); }
   1.287 +    //Node addNode() const { return gw.addNode(); }
   1.288      //Edge addEdge(const Node& tail, const Node& head) const { 
   1.289 -    //  return graph->addEdge(tail, head); }
   1.290 +    //  return gw.addEdge(tail, head); }
   1.291    
   1.292      //void erase(const OutEdgeIt& e) {
   1.293      //  first_out_edge(this->tail(e))=e;
   1.294 @@ -1162,9 +1164,9 @@
   1.295        next(f);
   1.296        first_out_edges.set(this->tail(e), f);
   1.297      }
   1.298 -    //template<typename I> void erase(const I& i) const { graph->erase(i); }
   1.299 +    //template<typename I> void erase(const I& i) const { gw.erase(i); }
   1.300    
   1.301 -    //void clear() const { graph->clear(); }
   1.302 +    //void clear() const { gw.clear(); }
   1.303      
   1.304      template<typename T> class NodeMap : public ResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::NodeMap<T> { 
   1.305      public:
   1.306 @@ -1209,7 +1211,7 @@
   1.307    public:
   1.308      FilterGraphWrapper(const Graph& _G, FlowMap& _flow, 
   1.309  			   const CapacityMap& _capacity) : 
   1.310 -      ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>(_G, _flow, _capacity), dist(*this, graph->nodeNum()) { 
   1.311 +      ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>(_G, _flow, _capacity), dist(*this, gw.nodeNum()) { 
   1.312      }
   1.313  
   1.314      OutEdgeIt& first(OutEdgeIt& e, const Node& n) const {
   1.315 @@ -1248,13 +1250,13 @@
   1.316      //void setGraph(Graph& _graph) { graph = &_graph; }
   1.317      //Graph& getGraph() const { return (*graph); }
   1.318      
   1.319 -    //template<typename I> I& first(I& i) const { return graph->first(i); }
   1.320 +    //template<typename I> I& first(I& i) const { return gw.first(i); }
   1.321      //template<typename I, typename P> I& first(I& i, const P& p) const { 
   1.322 -    //  return graph->first(i, p); }
   1.323 +    //  return gw.first(i, p); }
   1.324      
   1.325      //template<typename I> I getNext(const I& i) const { 
   1.326 -    //  return graph->getNext(i); }
   1.327 -    //template<typename I> I& next(I &i) const { return graph->next(i); }    
   1.328 +    //  return gw.getNext(i); }
   1.329 +    //template<typename I> I& next(I &i) const { return gw.next(i); }    
   1.330  
   1.331      template< typename It > It first() const { 
   1.332        It e; first(e); return e; }
   1.333 @@ -1262,30 +1264,30 @@
   1.334      template< typename It > It first(const Node& v) const { 
   1.335        It e; first(e, v); return e; }
   1.336  
   1.337 -    //Node head(const Edge& e) const { return graph->head(e); }
   1.338 -    //Node tail(const Edge& e) const { return graph->tail(e); }
   1.339 +    //Node head(const Edge& e) const { return gw.head(e); }
   1.340 +    //Node tail(const Edge& e) const { return gw.tail(e); }
   1.341  
   1.342      //template<typename I> bool valid(const I& i) const 
   1.343 -    //  { return graph->valid(i); }
   1.344 +    //  { return gw.valid(i); }
   1.345    
   1.346      //template<typename I> void setInvalid(const I &i);
   1.347 -    //{ return graph->setInvalid(i); }
   1.348 +    //{ return gw.setInvalid(i); }
   1.349  
   1.350 -    //int nodeNum() const { return graph->nodeNum(); }
   1.351 -    //int edgeNum() const { return graph->edgeNum(); }
   1.352 +    //int nodeNum() const { return gw.nodeNum(); }
   1.353 +    //int edgeNum() const { return gw.edgeNum(); }
   1.354    
   1.355      //template<typename I> Node aNode(const I& e) const { 
   1.356 -    //  return graph->aNode(e); }
   1.357 +    //  return gw.aNode(e); }
   1.358      //template<typename I> Node bNode(const I& e) const { 
   1.359 -    //  return graph->bNode(e); }
   1.360 +    //  return gw.bNode(e); }
   1.361    
   1.362 -    //Node addNode() const { return graph->addNode(); }
   1.363 +    //Node addNode() const { return gw.addNode(); }
   1.364      //Edge addEdge(const Node& tail, const Node& head) const { 
   1.365 -    //  return graph->addEdge(tail, head); }
   1.366 +    //  return gw.addEdge(tail, head); }
   1.367    
   1.368 -    //template<typename I> void erase(const I& i) const { graph->erase(i); }
   1.369 +    //template<typename I> void erase(const I& i) const { gw.erase(i); }
   1.370    
   1.371 -    //void clear() const { graph->clear(); }
   1.372 +    //void clear() const { gw.clear(); }
   1.373      
   1.374      template<typename T> class NodeMap : public ErasingResGraphWrapper<Graph, Number, FlowMap, CapacityMap>::NodeMap<T> { 
   1.375      public:
   1.376 @@ -1341,10 +1343,10 @@
   1.377  //     typedef typename Graph::SymEdgeIt SymEdgeIt;
   1.378  //     typedef typename Graph::EdgeIt EdgeIt;
   1.379  
   1.380 -//     int nodeNum() const { return graph->nodeNum(); }
   1.381 -//     int edgeNum() const { return graph->edgeNum(); }
   1.382 +//     int nodeNum() const { return gw.nodeNum(); }
   1.383 +//     int edgeNum() const { return gw.edgeNum(); }
   1.384  
   1.385 -//     Node& first(Node& n) const { return graph->first(n); }
   1.386 +//     Node& first(Node& n) const { return gw.first(n); }
   1.387  
   1.388  //     // Edge and SymEdge  is missing!!!!
   1.389  //     // Edge <-> In/OutEdgeIt conversion is missing!!!!
   1.390 @@ -1353,70 +1355,70 @@
   1.391  //     OutEdgeIt& first(OutEdgeIt& e, const Node& n) const 
   1.392  //       {
   1.393  // 	e.n=n;
   1.394 -// 	graph->first(e.o,n);
   1.395 -// 	while(graph->valid(e.o) && fmap.get(e.o)>=himap.get(e.o))
   1.396 -// 	  graph->goNext(e.o);
   1.397 -// 	if(!graph->valid(e.o)) {
   1.398 -// 	  graph->first(e.i,n);
   1.399 -// 	  while(graph->valid(e.i) && fmap.get(e.i)<=lomap.get(e.i))
   1.400 -// 	    graph->goNext(e.i);
   1.401 +// 	gw.first(e.o,n);
   1.402 +// 	while(gw.valid(e.o) && fmap.get(e.o)>=himap.get(e.o))
   1.403 +// 	  gw.goNext(e.o);
   1.404 +// 	if(!gw.valid(e.o)) {
   1.405 +// 	  gw.first(e.i,n);
   1.406 +// 	  while(gw.valid(e.i) && fmap.get(e.i)<=lomap.get(e.i))
   1.407 +// 	    gw.goNext(e.i);
   1.408  // 	}
   1.409  // 	return e;
   1.410  //       }
   1.411  // /*
   1.412  //   OutEdgeIt &goNext(OutEdgeIt &e)
   1.413  //   {
   1.414 -//   if(graph->valid(e.o)) {
   1.415 -//   while(graph->valid(e.o) && fmap.get(e.o)>=himap.get(e.o))
   1.416 -//   graph->goNext(e.o);
   1.417 -//   if(graph->valid(e.o)) return e;
   1.418 -//   else graph->first(e.i,e.n);
   1.419 +//   if(gw.valid(e.o)) {
   1.420 +//   while(gw.valid(e.o) && fmap.get(e.o)>=himap.get(e.o))
   1.421 +//   gw.goNext(e.o);
   1.422 +//   if(gw.valid(e.o)) return e;
   1.423 +//   else gw.first(e.i,e.n);
   1.424  //   }
   1.425  //   else {
   1.426 -//   while(graph->valid(e.i) && fmap.get(e.i)<=lomap.get(e.i))
   1.427 -//   graph->goNext(e.i);
   1.428 +//   while(gw.valid(e.i) && fmap.get(e.i)<=lomap.get(e.i))
   1.429 +//   gw.goNext(e.i);
   1.430  //   return e;
   1.431  //   }
   1.432  //   }
   1.433  //   OutEdgeIt Next(const OutEdgeIt &e) {OutEdgeIt t(e); return goNext(t);}
   1.434  // */
   1.435 -//     //bool valid(const OutEdgeIt e) { return graph->valid(e.o)||graph->valid(e.i);}
   1.436 +//     //bool valid(const OutEdgeIt e) { return gw.valid(e.o)||gw.valid(e.i);}
   1.437  
   1.438  //     //FIXME
   1.439  //     InEdgeIt& first(InEdgeIt& e, const Node& n) const 
   1.440  //       {
   1.441  // 	e.n=n;
   1.442 -// 	graph->first(e.i,n);
   1.443 -// 	while(graph->valid(e.i) && fmap.get(e.i)>=himap.get(e.i))
   1.444 -// 	  graph->goNext(e.i);
   1.445 -// 	if(!graph->valid(e.i)) {
   1.446 -// 	  graph->first(e.o,n);
   1.447 -// 	  while(graph->valid(e.o) && fmap.get(e.o)<=lomap.get(e.o))
   1.448 -// 	    graph->goNext(e.o);
   1.449 +// 	gw.first(e.i,n);
   1.450 +// 	while(gw.valid(e.i) && fmap.get(e.i)>=himap.get(e.i))
   1.451 +// 	  gw.goNext(e.i);
   1.452 +// 	if(!gw.valid(e.i)) {
   1.453 +// 	  gw.first(e.o,n);
   1.454 +// 	  while(gw.valid(e.o) && fmap.get(e.o)<=lomap.get(e.o))
   1.455 +// 	    gw.goNext(e.o);
   1.456  // 	}
   1.457  // 	return e;
   1.458  //       }
   1.459  // /*
   1.460  //   InEdgeIt &goNext(InEdgeIt &e)
   1.461  //   {
   1.462 -//   if(graph->valid(e.i)) {
   1.463 -//   while(graph->valid(e.i) && fmap.get(e.i)>=himap.get(e.i))
   1.464 -//   graph->goNext(e.i);
   1.465 -//   if(graph->valid(e.i)) return e;
   1.466 -//   else graph->first(e.o,e.n);
   1.467 +//   if(gw.valid(e.i)) {
   1.468 +//   while(gw.valid(e.i) && fmap.get(e.i)>=himap.get(e.i))
   1.469 +//   gw.goNext(e.i);
   1.470 +//   if(gw.valid(e.i)) return e;
   1.471 +//   else gw.first(e.o,e.n);
   1.472  //   }
   1.473  //   else {
   1.474 -//   while(graph->valid(e.o) && fmap.get(e.o)<=lomap.get(e.o))
   1.475 -//   graph->goNext(e.o);
   1.476 +//   while(gw.valid(e.o) && fmap.get(e.o)<=lomap.get(e.o))
   1.477 +//   gw.goNext(e.o);
   1.478  //   return e;
   1.479  //   }
   1.480  //   }
   1.481  //   InEdgeIt Next(const InEdgeIt &e) {InEdgeIt t(e); return goNext(t);}
   1.482  // */
   1.483 -//     //bool valid(const InEdgeIt e) { return graph->valid(e.i)||graph->valid(e.o);}
   1.484 +//     //bool valid(const InEdgeIt e) { return gw.valid(e.i)||gw.valid(e.o);}
   1.485  
   1.486 -//     //template<typename I> I &goNext(I &i); { return graph->goNext(i); }
   1.487 -//     //template<typename I> I next(const I i); { return graph->goNext(i); }
   1.488 +//     //template<typename I> I &goNext(I &i); { return gw.goNext(i); }
   1.489 +//     //template<typename I> I next(const I i); { return gw.goNext(i); }
   1.490  
   1.491  //     template< typename It > It first() const { 
   1.492  //       It e; first(e); return e; }
   1.493 @@ -1424,27 +1426,27 @@
   1.494  //     template< typename It > It first(Node v) const { 
   1.495  //       It e; first(e, v); return e; }
   1.496  
   1.497 -//     Node head(const Edge& e) const { return graph->head(e); }
   1.498 -//     Node tail(const Edge& e) const { return graph->tail(e); }
   1.499 +//     Node head(const Edge& e) const { return gw.head(e); }
   1.500 +//     Node tail(const Edge& e) const { return gw.tail(e); }
   1.501    
   1.502  //     template<typename I> Node aNode(const I& e) const { 
   1.503 -//       return graph->aNode(e); }
   1.504 +//       return gw.aNode(e); }
   1.505  //     template<typename I> Node bNode(const I& e) const { 
   1.506 -//       return graph->bNode(e); }
   1.507 +//       return gw.bNode(e); }
   1.508    
   1.509  //     //template<typename I> bool valid(const I i);
   1.510 -//     //{ return graph->valid(i); }
   1.511 +//     //{ return gw.valid(i); }
   1.512    
   1.513  //     //template<typename I> void setInvalid(const I &i);
   1.514 -//     //{ return graph->setInvalid(i); }
   1.515 +//     //{ return gw.setInvalid(i); }
   1.516    
   1.517 -//     Node addNode() { return graph->addNode(); }
   1.518 +//     Node addNode() { return gw.addNode(); }
   1.519  //     Edge addEdge(const Node& tail, const Node& head) { 
   1.520 -//       return graph->addEdge(tail, head); }
   1.521 +//       return gw.addEdge(tail, head); }
   1.522    
   1.523 -//     template<typename I> void erase(const I& i) { graph->erase(i); }
   1.524 +//     template<typename I> void erase(const I& i) { gw.erase(i); }
   1.525    
   1.526 -//     void clear() { graph->clear(); }
   1.527 +//     void clear() { gw.clear(); }
   1.528    
   1.529  //     template<typename S> class NodeMap : public Graph::NodeMap<S> { };
   1.530  //     template<typename S> class EdgeMap : public Graph::EdgeMap<S> { };
   1.531 @@ -1458,5 +1460,5 @@
   1.532  
   1.533  } //namespace hugo
   1.534  
   1.535 -#endif //GRAPH_WRAPPER_H
   1.536 +#endif //HUGO_GRAPH_WRAPPER_H
   1.537