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