src/work/marci/graph_wrapper.h
author marci
Mon, 16 Feb 2004 11:38:19 +0000
changeset 76 d9650659a6ee
child 105 a3c73e9b9b2e
permissions -rw-r--r--
.
     1 // -*-mode: c++; -*-
     2 #ifndef GRAPH_WRAPPER_H
     3 #define GRAPH_WRAPPER_H
     4 
     5 namespace marci {
     6 
     7   template<typename Graph>
     8   class TrivGraphWrapper {
     9     Graph* graph;
    10   
    11   public:
    12     typedef Graph BaseGraph;
    13 
    14     typedef typename Graph::NodeIt NodeIt;
    15     typedef typename Graph::EdgeIt EdgeIt;
    16   
    17     typedef typename Graph::EachNodeIt EachNodeIt;
    18 
    19     typedef typename Graph::OutEdgeIt OutEdgeIt;
    20     typedef typename Graph::InEdgeIt InEdgeIt;
    21     typedef typename Graph::SymEdgeIt SymEdgeIt;
    22     typedef typename Graph::EachEdgeIt EachEdgeIt;
    23 
    24     int nodeNum() const { return graph->nodeNum(); }
    25     int edgeNum() const { return graph->edgeNum(); }
    26     
    27     template<typename I> I& getFirst(I& i) const { return graph->getFirst(i); }
    28     template<typename I, typename P> I& getFirst(I& i, const P& p) const { 
    29       return graph->getFirst(i, p); }
    30     //template<typename I> I next(const I i); { return graph->goNext(i); }
    31     //template<typename I> I &goNext(I &i); { return graph->goNext(i); }
    32 
    33     template< typename It > It first() const { 
    34       It e; getFirst(e); return e; }
    35 
    36     template< typename It > It first(NodeIt v) const { 
    37       It e; getFirst(e, v); return e; }
    38 
    39     NodeIt head(const EdgeIt& e) const { return graph->head(e); }
    40     NodeIt tail(const EdgeIt& e) const { return graph->tail(e); }
    41   
    42     template<typename I> NodeIt aNode(const I& e) const { 
    43       return graph->aNode(e); }
    44     template<typename I> NodeIt bNode(const I& e) const { 
    45       return graph->bNode(e); }
    46   
    47     //template<typename I> bool valid(const I& i) 
    48     //{ return graph->valid(i); }
    49   
    50     //template<typename I> void setInvalid(const I &i);
    51     //{ return graph->setInvalid(i); }
    52   
    53     NodeIt addNode() const { return graph->addNode(); }
    54     EdgeIt addEdge(const NodeIt& tail, const NodeIt& head) const { 
    55       return graph->addEdge(tail, head); }
    56   
    57     template<typename I> void erase(const I& i) const { graph->erase(i); }
    58   
    59     void clear() const { graph->clear(); }
    60   
    61     template<typename T> class NodeMap : public Graph::NodeMap<T> { 
    62     public:
    63       NodeMap(const Graph& _G) : Graph::NodeMap<T>(_G) { }
    64       NodeMap(const Graph& _G, T a) : Graph::NodeMap<T>(_G, a) { }
    65     };
    66     template<typename T> class EdgeMap : public Graph::EdgeMap<T> { };
    67   
    68     void setGraph(Graph& _graph) { graph = &_graph; }
    69     Graph& getGraph() { return (*graph); }
    70   
    71     //TrivGraphWrapper() : graph(0) { }
    72     TrivGraphWrapper(Graph& _graph) : graph(&_graph) { }
    73   };
    74 
    75   template<typename Graph>
    76   class ConstTrivGraphWrapper {
    77     const Graph* graph;
    78   
    79   public:
    80     typedef Graph BaseGraph;
    81 
    82     typedef typename Graph::NodeIt NodeIt;
    83     typedef typename Graph::EdgeIt EdgeIt;
    84   
    85     typedef typename Graph::EachNodeIt EachNodeIt;
    86 
    87     typedef typename Graph::OutEdgeIt OutEdgeIt;
    88     typedef typename Graph::InEdgeIt InEdgeIt;
    89     typedef typename Graph::SymEdgeIt SymEdgeIt;
    90     typedef typename Graph::EachEdgeIt EachEdgeIt;
    91 
    92     int nodeNum() const { return graph->nodeNum(); }
    93     int edgeNum() const { return graph->edgeNum(); }
    94     
    95     template<typename I> I& getFirst(I& i) const { return graph->getFirst(i); }
    96     template<typename I, typename P> I& getFirst(I& i, const P& p) const { 
    97       return graph->getFirst(i, p); }
    98     //template<typename I> I next(const I i); { return graph->goNext(i); }
    99     //template<typename I> I &goNext(I &i); { return graph->goNext(i); }
   100 
   101     template< typename It > It first() const { 
   102       It e; getFirst(e); return e; }
   103 
   104     template< typename It > It first(NodeIt v) const { 
   105       It e; getFirst(e, v); return e; }
   106 
   107     NodeIt head(const EdgeIt& e) const { return graph->head(e); }
   108     NodeIt tail(const EdgeIt& e) const { return graph->tail(e); }
   109   
   110     template<typename I> NodeIt aNode(const I& e) const { 
   111       return graph->aNode(e); }
   112     template<typename I> NodeIt bNode(const I& e) const { 
   113       return graph->bNode(e); }
   114   
   115     //template<typename I> bool valid(const I& i) 
   116     //{ return graph->valid(i); }
   117   
   118     //template<typename I> void setInvalid(const I &i);
   119     //{ return graph->setInvalid(i); }
   120   
   121     NodeIt addNode() const { return graph->addNode(); }
   122     EdgeIt addEdge(const NodeIt& tail, const NodeIt& head) const { 
   123       return graph->addEdge(tail, head); }
   124   
   125     template<typename I> void erase(const I& i) const { graph->erase(i); }
   126   
   127     void clear() const { graph->clear(); }
   128   
   129     template<typename T> class NodeMap : public Graph::NodeMap<T> { 
   130     public:
   131       NodeMap(const Graph& _G) : Graph::NodeMap<T>(_G) { }
   132       NodeMap(const Graph& _G, T a) : Graph::NodeMap<T>(_G, a) { }
   133     };
   134     template<typename T> class EdgeMap : public Graph::EdgeMap<T> { };
   135   
   136     void setGraph(const Graph& _graph) { graph = &_graph; }
   137     const Graph& getGraph() { return (*graph); }
   138   
   139     //ConstTrivGraphWrapper() : graph(0) { }
   140     ConstTrivGraphWrapper(const Graph& _graph) : graph(&_graph) { }
   141   };
   142 
   143 
   144   template<typename Graph>
   145   class RevGraphWrapper
   146   {
   147     Graph* graph;
   148   
   149   public:
   150     typedef Graph BaseGraph;
   151 
   152     typedef typename Graph::NodeIt NodeIt;
   153     typedef typename Graph::EdgeIt EdgeIt;
   154   
   155     typedef typename Graph::EachNodeIt EachNodeIt;
   156   
   157     typedef typename Graph::OutEdgeIt InEdgeIt;
   158     typedef typename Graph::InEdgeIt OutEdgeIt;
   159     typedef typename Graph::SymEdgeIt SymEdgeIt;
   160     typedef typename Graph::EachEdgeIt EachEdgeIt;
   161 
   162     int nodeNum() const { return graph->nodeNum(); }
   163     int edgeNum() const { return graph->edgeNum(); }
   164     
   165     template<typename I> I& getFirst(I& i) const { return graph->getFirst(i); }
   166     template<typename I, typename P> I& getFirst(I& i, const P& p) const { 
   167       return graph->getFirst(i, p); }
   168     //template<typename I> I next(const I i); { return graph->goNext(i); }
   169     //template<typename I> I &goNext(I &i); { return graph->goNext(i); }
   170 
   171     template< typename It > It first() const { 
   172       It e; getFirst(e); return e; }
   173 
   174     template< typename It > It first(NodeIt v) const { 
   175       It e; getFirst(e, v); return e; }
   176 
   177     NodeIt head(const EdgeIt& e) const { return graph->tail(e); }
   178     NodeIt tail(const EdgeIt& e) const { return graph->head(e); }
   179   
   180     template<typename I> NodeIt aNode(const I& e) const { 
   181       return graph->aNode(e); }
   182     template<typename I> NodeIt bNode(const I& e) const { 
   183       return graph->bNode(e); }
   184   
   185     //template<typename I> bool valid(const I i);
   186     //{ return graph->valid(i); }
   187   
   188     //template<typename I> void setInvalid(const I &i);
   189     //{ return graph->setInvalid(i); }
   190   
   191     NodeIt addNode() { return graph->addNode(); }
   192     EdgeIt addEdge(const NodeIt& tail, const NodeIt& head) { 
   193       return graph->addEdge(tail, head); }
   194   
   195     template<typename I> void erase(const I& i) { graph->erase(i); }
   196   
   197     void clear() { graph->clear(); }
   198   
   199     template<typename T> class NodeMap : public Graph::NodeMap<T> { };
   200     template<typename T> class EdgeMap : public Graph::EdgeMap<T> { };
   201   
   202     void setGraph(Graph& _graph) { graph = &_graph; }
   203     Graph& getGraph() { return (*graph); }
   204 
   205     //RevGraphWrapper() : graph(0) { }
   206     RevGraphWrapper(Graph& _graph) : graph(&_graph) { }
   207   };
   208 
   209   template<typename Graph>
   210   class SymGraphWrapper
   211   {
   212     Graph* graph;
   213   
   214   public:
   215     typedef Graph BaseGraph;
   216 
   217     typedef typename Graph::NodeIt NodeIt;
   218     typedef typename Graph::EdgeIt EdgeIt;
   219   
   220     typedef typename Graph::EachNodeIt EachNodeIt;
   221     
   222     //FIXME tag-ekkel megcsinalni, hogy abbol csinaljon
   223     //iranyitatlant, ami van
   224     //mert csak 1 dolgot lehet be typedef-elni
   225     typedef typename Graph::OutEdgeIt SymEdgeIt;
   226     //typedef typename Graph::InEdgeIt SymEdgeIt;
   227     //typedef typename Graph::SymEdgeIt SymEdgeIt;
   228     typedef typename Graph::EachEdgeIt EachEdgeIt;
   229 
   230     int nodeNum() const { return graph->nodeNum(); }
   231     int edgeNum() const { return graph->edgeNum(); }
   232     
   233     template<typename I> I& getFirst(I& i) const { return graph->getFirst(i); }
   234     template<typename I, typename P> I& getFirst(I& i, const P& p) const { 
   235       return graph->getFirst(i, p); }
   236     //template<typename I> I next(const I i); { return graph->goNext(i); }
   237     //template<typename I> I &goNext(I &i); { return graph->goNext(i); }
   238 
   239     template< typename It > It first() const { 
   240       It e; getFirst(e); return e; }
   241 
   242     template< typename It > It first(NodeIt v) const { 
   243       It e; getFirst(e, v); return e; }
   244 
   245     NodeIt head(const EdgeIt& e) const { return graph->head(e); }
   246     NodeIt tail(const EdgeIt& e) const { return graph->tail(e); }
   247   
   248     template<typename I> NodeIt aNode(const I& e) const { 
   249       return graph->aNode(e); }
   250     template<typename I> NodeIt bNode(const I& e) const { 
   251       return graph->bNode(e); }
   252   
   253     //template<typename I> bool valid(const I i);
   254     //{ return graph->valid(i); }
   255   
   256     //template<typename I> void setInvalid(const I &i);
   257     //{ return graph->setInvalid(i); }
   258   
   259     NodeIt addNode() { return graph->addNode(); }
   260     EdgeIt addEdge(const NodeIt& tail, const NodeIt& head) { 
   261       return graph->addEdge(tail, head); }
   262   
   263     template<typename I> void erase(const I& i) { graph->erase(i); }
   264   
   265     void clear() { graph->clear(); }
   266   
   267     template<typename T> class NodeMap : public Graph::NodeMap<T> { };
   268     template<typename T> class EdgeMap : public Graph::EdgeMap<T> { };
   269   
   270     void setGraph(Graph& _graph) { graph = &_graph; }
   271     Graph& getGraph() { return (*graph); }
   272 
   273     //SymGraphWrapper() : graph(0) { }
   274     SymGraphWrapper(Graph& _graph) : graph(&_graph) { }
   275   };
   276 
   277 
   278 // FIXME: comparison should be made better!!!
   279   template<typename Graph, typename T, typename LowerMap, typename FlowMap, typename UpperMap>
   280   class ResGraphWrapper
   281   {
   282     Graph* graph;
   283   
   284   public:
   285     typedef Graph BaseGraph;
   286 
   287     typedef typename Graph::NodeIt NodeIt;
   288     typedef typename Graph::EdgeIt EdgeIt;
   289   
   290     typedef typename Graph::EachNodeIt EachNodeIt;
   291    
   292     class OutEdgeIt {
   293     public:
   294       //Graph::NodeIt n;
   295       bool out_or_in;
   296       typename Graph::OutEdgeIt o;
   297       typename Graph::InEdgeIt i;   
   298     };
   299     class InEdgeIt {
   300     public:
   301       //Graph::NodeIt n;
   302       bool out_or_in;
   303       typename Graph::OutEdgeIt o;
   304       typename Graph::InEdgeIt i;   
   305     };
   306     typedef typename Graph::SymEdgeIt SymEdgeIt;
   307     typedef typename Graph::EachEdgeIt EachEdgeIt;
   308 
   309     int nodeNum() const { return graph->nodeNum(); }
   310     int edgeNum() const { return graph->edgeNum(); }
   311 
   312     NodeIt& getFirst(NodeIt& n) const { return graph->getFirst(n); }
   313 
   314     // EachEdge and SymEdge  is missing!!!!
   315     // EdgeIt <-> In/OutEdgeIt conversion is missing!!!!
   316 
   317     //FIXME
   318     OutEdgeIt& getFirst(OutEdgeIt& e, const NodeIt& n) const 
   319       {
   320 	e.n=n;
   321 	graph->getFirst(e.o,n);
   322 	while(graph->valid(e.o) && fmap.get(e.o)>=himap.get(e.o))
   323 	  graph->goNext(e.o);
   324 	if(!graph->valid(e.o)) {
   325 	  graph->getFirst(e.i,n);
   326 	  while(graph->valid(e.i) && fmap.get(e.i)<=lomap.get(e.i))
   327 	    graph->goNext(e.i);
   328 	}
   329 	return e;
   330       }
   331 /*
   332   OutEdgeIt &goNext(OutEdgeIt &e)
   333   {
   334   if(graph->valid(e.o)) {
   335   while(graph->valid(e.o) && fmap.get(e.o)>=himap.get(e.o))
   336   graph->goNext(e.o);
   337   if(graph->valid(e.o)) return e;
   338   else graph->getFirst(e.i,e.n);
   339   }
   340   else {
   341   while(graph->valid(e.i) && fmap.get(e.i)<=lomap.get(e.i))
   342   graph->goNext(e.i);
   343   return e;
   344   }
   345   }
   346   OutEdgeIt Next(const OutEdgeIt &e) {OutEdgeIt t(e); return goNext(t);}
   347 */
   348     //bool valid(const OutEdgeIt e) { return graph->valid(e.o)||graph->valid(e.i);}
   349 
   350     //FIXME
   351     InEdgeIt& getFirst(InEdgeIt& e, const NodeIt& n) const 
   352       {
   353 	e.n=n;
   354 	graph->getFirst(e.i,n);
   355 	while(graph->valid(e.i) && fmap.get(e.i)>=himap.get(e.i))
   356 	  graph->goNext(e.i);
   357 	if(!graph->valid(e.i)) {
   358 	  graph->getFirst(e.o,n);
   359 	  while(graph->valid(e.o) && fmap.get(e.o)<=lomap.get(e.o))
   360 	    graph->goNext(e.o);
   361 	}
   362 	return e;
   363       }
   364 /*
   365   InEdgeIt &goNext(InEdgeIt &e)
   366   {
   367   if(graph->valid(e.i)) {
   368   while(graph->valid(e.i) && fmap.get(e.i)>=himap.get(e.i))
   369   graph->goNext(e.i);
   370   if(graph->valid(e.i)) return e;
   371   else graph->getFirst(e.o,e.n);
   372   }
   373   else {
   374   while(graph->valid(e.o) && fmap.get(e.o)<=lomap.get(e.o))
   375   graph->goNext(e.o);
   376   return e;
   377   }
   378   }
   379   InEdgeIt Next(const InEdgeIt &e) {InEdgeIt t(e); return goNext(t);}
   380 */
   381     //bool valid(const InEdgeIt e) { return graph->valid(e.i)||graph->valid(e.o);}
   382 
   383     //template<typename I> I &goNext(I &i); { return graph->goNext(i); }
   384     //template<typename I> I next(const I i); { return graph->goNext(i); }
   385 
   386     template< typename It > It first() const { 
   387       It e; getFirst(e); return e; }
   388 
   389     template< typename It > It first(NodeIt v) const { 
   390       It e; getFirst(e, v); return e; }
   391 
   392     NodeIt head(const EdgeIt& e) const { return graph->head(e); }
   393     NodeIt tail(const EdgeIt& e) const { return graph->tail(e); }
   394   
   395     template<typename I> NodeIt aNode(const I& e) const { 
   396       return graph->aNode(e); }
   397     template<typename I> NodeIt bNode(const I& e) const { 
   398       return graph->bNode(e); }
   399   
   400     //template<typename I> bool valid(const I i);
   401     //{ return graph->valid(i); }
   402   
   403     //template<typename I> void setInvalid(const I &i);
   404     //{ return graph->setInvalid(i); }
   405   
   406     NodeIt addNode() { return graph->addNode(); }
   407     EdgeIt addEdge(const NodeIt& tail, const NodeIt& head) { 
   408       return graph->addEdge(tail, head); }
   409   
   410     template<typename I> void erase(const I& i) { graph->erase(i); }
   411   
   412     void clear() { graph->clear(); }
   413   
   414     template<typename S> class NodeMap : public Graph::NodeMap<S> { };
   415     template<typename S> class EdgeMap : public Graph::EdgeMap<S> { };
   416   
   417     void setGraph(Graph& _graph) { graph = &_graph; }
   418     Graph& getGraph() { return (*graph); }
   419 
   420     //ResGraphWrapper() : graph(0) { }
   421     ResGraphWrapper(Graph& _graph) : graph(&_graph) { }
   422   };
   423 
   424 
   425 // FIXME: comparison should be made better!!!
   426   template<typename Graph, typename T, typename LowerMap, typename FlowMap, typename UpperMap>
   427   class ConstResGraphWrapper
   428   {
   429     const Graph* graph;
   430     const LowerMap* low;
   431     FlowMap* flow;
   432     const UpperMap* up;
   433   public:
   434     typedef Graph BaseGraph;
   435 
   436     typedef typename Graph::NodeIt NodeIt;
   437     typedef typename Graph::EdgeIt EdgeIt;
   438   
   439     typedef typename Graph::EachNodeIt EachNodeIt;
   440    
   441     class OutEdgeIt {
   442     public:
   443       //Graph::NodeIt n;
   444       bool out_or_in;
   445       typename Graph::SymEdgeIt sym;
   446     };
   447     class InEdgeIt {
   448     public:
   449       //Graph::NodeIt n;
   450       bool out_or_in;
   451       typename Graph::OutEdgeIt sym;
   452     };
   453     //typedef typename Graph::SymEdgeIt SymEdgeIt;
   454     //typedef typename Graph::EachEdgeIt EachEdgeIt;
   455 
   456     int nodeNum() const { return graph->nodeNum(); }
   457     //int edgeNum() const { return graph->edgeNum(); }
   458 
   459     NodeIt& getFirst(NodeIt& n) const { return graph->getFirst(n); }
   460 
   461     // EachEdge and SymEdge  is missing!!!!
   462     // EdgeIt <-> In/OutEdgeIt conversion is missing!!!!
   463 
   464     
   465     //FIXME
   466     OutEdgeIt& getFirst(OutEdgeIt& e, const NodeIt& n) const 
   467       {
   468 	e.n=n;
   469 	graph->getFirst(e.o,n);
   470 	while(graph->valid(e.o) && fmap.get(e.o)>=himap.get(e.o))
   471 	  graph->goNext(e.o);
   472 	if(!graph->valid(e.o)) {
   473 	  graph->getFirst(e.i,n);
   474 	  while(graph->valid(e.i) && fmap.get(e.i)<=lomap.get(e.i))
   475 	    graph->goNext(e.i);
   476 	}
   477 	return e;
   478       }
   479 /*
   480   OutEdgeIt &goNext(OutEdgeIt &e)
   481   {
   482   if(graph->valid(e.o)) {
   483   while(graph->valid(e.o) && fmap.get(e.o)>=himap.get(e.o))
   484   graph->goNext(e.o);
   485   if(graph->valid(e.o)) return e;
   486   else graph->getFirst(e.i,e.n);
   487   }
   488   else {
   489   while(graph->valid(e.i) && fmap.get(e.i)<=lomap.get(e.i))
   490   graph->goNext(e.i);
   491   return e;
   492   }
   493   }
   494   OutEdgeIt Next(const OutEdgeIt &e) {OutEdgeIt t(e); return goNext(t);}
   495 */
   496     //bool valid(const OutEdgeIt e) { return graph->valid(e.o)||graph->valid(e.i);}
   497 
   498     //FIXME
   499     InEdgeIt& getFirst(InEdgeIt& e, const NodeIt& n) const 
   500       {
   501 	e.n=n;
   502 	graph->getFirst(e.i,n);
   503 	while(graph->valid(e.i) && fmap.get(e.i)>=himap.get(e.i))
   504 	  graph->goNext(e.i);
   505 	if(!graph->valid(e.i)) {
   506 	  graph->getFirst(e.o,n);
   507 	  while(graph->valid(e.o) && fmap.get(e.o)<=lomap.get(e.o))
   508 	    graph->goNext(e.o);
   509 	}
   510 	return e;
   511       }
   512 /*
   513   InEdgeIt &goNext(InEdgeIt &e)
   514   {
   515   if(graph->valid(e.i)) {
   516   while(graph->valid(e.i) && fmap.get(e.i)>=himap.get(e.i))
   517   graph->goNext(e.i);
   518   if(graph->valid(e.i)) return e;
   519   else graph->getFirst(e.o,e.n);
   520   }
   521   else {
   522   while(graph->valid(e.o) && fmap.get(e.o)<=lomap.get(e.o))
   523   graph->goNext(e.o);
   524   return e;
   525   }
   526   }
   527   InEdgeIt Next(const InEdgeIt &e) {InEdgeIt t(e); return goNext(t);}
   528 */
   529     //bool valid(const InEdgeIt e) { return graph->valid(e.i)||graph->valid(e.o);}
   530 
   531     //template<typename I> I &goNext(I &i); { return graph->goNext(i); }
   532     //template<typename I> I next(const I i); { return graph->goNext(i); }
   533 
   534     template< typename It > It first() const { 
   535       It e; getFirst(e); return e; }
   536 
   537     template< typename It > It first(NodeIt v) const { 
   538       It e; getFirst(e, v); return e; }
   539 
   540     NodeIt head(const EdgeIt& e) const { return graph->head(e); }
   541     NodeIt tail(const EdgeIt& e) const { return graph->tail(e); }
   542   
   543     template<typename I> NodeIt aNode(const I& e) const { 
   544       return graph->aNode(e); }
   545     template<typename I> NodeIt bNode(const I& e) const { 
   546       return graph->bNode(e); }
   547   
   548     //template<typename I> bool valid(const I i);
   549     //{ return graph->valid(i); }
   550   
   551     //template<typename I> void setInvalid(const I &i);
   552     //{ return graph->setInvalid(i); }
   553   
   554     NodeIt addNode() { return graph->addNode(); }
   555     EdgeIt addEdge(const NodeIt& tail, const NodeIt& head) { 
   556       return graph->addEdge(tail, head); }
   557   
   558     template<typename I> void erase(const I& i) { graph->erase(i); }
   559   
   560     void clear() { graph->clear(); }
   561   
   562     template<typename S> class NodeMap : public Graph::NodeMap<S> { };
   563     template<typename S> class EdgeMap : public Graph::EdgeMap<S> { };
   564   
   565     void setGraph(const Graph& _graph) { graph = &_graph; }
   566     const Graph& getGraph() { return (*graph); }
   567 
   568     //ConstResGraphWrapper() : graph(0) { }
   569     ConstResGraphWrapper(const Graph& _graph) : graph(&_graph) { }
   570   };
   571 
   572 
   573 
   574 
   575 
   576 } //namespace marci
   577 
   578 #endif //GRAPH_WRAPPER_H
   579 
   580 
   581 //   NodeIt &getFirst(NodeIt &n) { return graph->getFirst(n); }
   582 //   InEdgeIt &getFirst(InEdgeIt &e,const NodeIt &n);
   583 //   { return graph->getFirst(e,n); }
   584 //   OutEdgeIt &getFirst(OutEdgeIt &e,const NodeIt &n);
   585 //   { return graph->getFirst(e,n); }
   586 //   SymEdgeIt &getFirst(SymEdgeIt &e,const NodeIt &n);
   587 //   { return graph->getFirst(e,n); }
   588 //   EachEdgeIt &getFirst(EachEdgeIt &e);
   589 //   { return graph->getFirst(e); }
   590    
   591 //   NodeIt next(const NodeIt &n);
   592 //   { return graph->next(n); }
   593 //   InEdgeIt next(const InEdgeIt &e);
   594 //   { return graph->next(e); }
   595 //   OutEdgeIt next(const OutEdgeIt &e);
   596 //   { return graph->next(e); }
   597 //   SymEdgeIt next(const SymEdgeIt &e);
   598 //   { return graph->next(e); }
   599 //   EachEdgeIt next(const EachEdgeIt &e);
   600 //   { return graph->next(e); }
   601  
   602 //   NodeIt &goNext(NodeIt &n);
   603 //   { return graph->goNext(n); }
   604 //   InEdgeIt &goNext(InEdgeIt &e);
   605 //   { return graph->goNext(e); }
   606 //   OutEdgeIt &goNext(OutEdgeIt &e);
   607 //   { return graph->goNext(e); }
   608 //   SymEdgeIt &goNext(SymEdgeIt &e);
   609 //   { return graph->goNext(e); }
   610 //   EachEdgeIt &goNext(EachEdgeIt &e);
   611 //   { return graph->goNext(e); }
   612