src/work/marci/bug/ansi_pedantic_bug.cc
author deba
Wed, 08 Sep 2004 12:06:45 +0000
changeset 822 88226d9fe821
parent 316 d9691d0102bd
permissions -rw-r--r--
The MapFactories have been removed from the code because
if we use macros then they increases only the complexity.

The pair iterators of the maps are separeted from the maps.

Some macros and comments has been changed.
marci@315
     1
// -*- c++ -*-
marci@315
     2
//compile it with 
marci@315
     3
//g++ -ansi -pedantic
marci@315
     4
//and with 
marci@315
     5
//g++
marci@315
     6
//I did with g++ ver 3.0.4, suse 8.0
marci@315
     7
//If the template is removed from NodeMap, then it works well.
marci@315
     8
//athos@cs.elte.hu
marci@315
     9
//klao@cs.elte.hu
marci@315
    10
//marci@cs.elte.hu
marci@315
    11
marci@315
    12
class ListGraph {
marci@315
    13
public:
marci@315
    14
  ListGraph() { }
marci@315
    15
marci@315
    16
  template <typename T> class NodeMap {
marci@315
    17
    const ListGraph& G; 
marci@315
    18
  public:
marci@315
    19
    NodeMap(const ListGraph& _G) : G(_G) { }
marci@315
    20
  };
marci@315
    21
marci@315
    22
};
marci@315
    23
marci@315
    24
template<typename Graph> class GraphWrapper {
marci@315
    25
protected:
marci@315
    26
  Graph* graph;
marci@315
    27
public:
marci@315
    28
  GraphWrapper(Graph& _graph) : graph(&_graph) { }
marci@315
    29
 
klao@383
    30
  template<typename T> class NodeMap : public Graph::template NodeMap<T> { 
klao@383
    31
    typedef typename Graph::template NodeMap<T> Parent;
marci@315
    32
  public:
marci@315
    33
    NodeMap(const GraphWrapper<Graph>& _G) :  
klao@383
    34
      Parent(*(_G.graph)) { }
marci@315
    35
  };
marci@315
    36
};
marci@315
    37
marci@315
    38
template<typename Graph>
marci@315
    39
class ResGraphWrapper : public GraphWrapper<Graph> {
marci@315
    40
public:
marci@315
    41
  ResGraphWrapper(Graph& _graph) : GraphWrapper<Graph>(_graph) { }
marci@315
    42
};
marci@315
    43
marci@315
    44
template <typename Graph> class MaxFlow {
marci@315
    45
  const Graph* g;
marci@315
    46
  typedef ResGraphWrapper<const Graph> ResGW;
marci@315
    47
public:
marci@315
    48
  MaxFlow(const Graph& _g) : g(&_g) { }
marci@315
    49
  void augmentOnShortestPath() {
marci@315
    50
    ResGW res_graph(*g);
klao@383
    51
    typename ResGW::template NodeMap<int> pred(res_graph); 
marci@315
    52
  }
marci@315
    53
};
marci@315
    54
marci@315
    55
int main(int, char **) {
marci@315
    56
  ListGraph G;
marci@315
    57
  MaxFlow<ListGraph> max_flow_test(G);
marci@315
    58
  max_flow_test.augmentOnShortestPath();
marci@315
    59
  return 0;
marci@315
    60
}