gravatar
deba@inf.elte.hu
deba@inf.elte.hu
Renamings in the graph_utils.h + graph_utils_test added
0 6 2
default
8 files changed with 787 insertions and 1024 deletions:
↑ Collapse diff ↑
Ignore white space 6 line context
1
/* -*- C++ -*-
2
 *
3
 * This file is a part of LEMON, a generic C++ optimization library
4
 *
5
 * Copyright (C) 2003-2008
6
 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
7
 * (Egervary Research Group on Combinatorial Optimization, EGRES).
8
 *
9
 * Permission to use, modify and distribute this software is granted
10
 * provided that this copyright notice appears in all copies. For
11
 * precise terms see the accompanying LICENSE file.
12
 *
13
 * This software is provided "AS IS" with no warranty of any kind,
14
 * express or implied, and with no claim as to its suitability for any
15
 * purpose.
16
 *
17
 */
18

	
19
#include <iostream>
20
#include <vector>
21

	
22
#include <lemon/graph_utils.h>
23

	
24
#include <lemon/list_graph.h>
25
#include <lemon/smart_graph.h>
26

	
27
#include "test_tools.h"
28
#include "graph_utils_test.h"
29

	
30

	
31
using namespace lemon;
32

	
33
template <class Graph>
34
void checkSnapDeg() 
35
{
36
  Graph g;
37
  typename Graph::Node n1=g.addNode();
38
  typename Graph::Node n2=g.addNode();
39
   
40
  InDegMap<Graph> ind(g);
41
 
42
  g.addArc(n1,n2);
43
  
44
  typename Graph::Snapshot snap(g);
45
  
46
  OutDegMap<Graph> outd(g);
47
  
48
  check(ind[n1]==0 && ind[n2]==1, "Wrong InDegMap value.");
49
  check(outd[n1]==1 && outd[n2]==0, "Wrong OutDegMap value.");
50

	
51
  g.addArc(n1,n2);
52
  g.addArc(n2,n1);
53
 
54
  check(ind[n1]==1 && ind[n2]==2, "Wrong InDegMap value.");
55
  check(outd[n1]==2 && outd[n2]==1, "Wrong OutDegMap value.");
56

	
57
  snap.restore();
58

	
59
  check(ind[n1]==0 && ind[n2]==1, "Wrong InDegMap value.");
60
  check(outd[n1]==1 && outd[n2]==0, "Wrong OutDegMap value.");
61
  
62
}
63

	
64
int main() {
65
  ///\file
66
  { // checking list graph
67
    checkDigraphCounters<ListDigraph>();
68
    checkFindArc<ListDigraph>();
69
  }
70
  { // checking smart graph
71
    checkDigraphCounters<SmartDigraph>();
72
    checkFindArc<SmartDigraph>();
73
  }
74
  {
75
    int num = 5;
76
    SmartDigraph fg;
77
    std::vector<SmartDigraph::Node> nodes;
78
    for (int i = 0; i < num; ++i) {
79
      nodes.push_back(fg.addNode());
80
    }
81
    for (int i = 0; i < num * num; ++i) {
82
      fg.addArc(nodes[i / num], nodes[i % num]);
83
    }
84
    check(countNodes(fg) == num, "FullGraph: wrong node number.");
85
    check(countArcs(fg) == num*num, "FullGraph: wrong arc number.");
86
    for (SmartDigraph::NodeIt src(fg); src != INVALID; ++src) {
87
      for (SmartDigraph::NodeIt trg(fg); trg != INVALID; ++trg) {
88
	ConArcIt<SmartDigraph> con(fg, src, trg);
89
	check(con != INVALID, "There is no connecting arc.");
90
	check(fg.source(con) == src, "Wrong source.");
91
	check(fg.target(con) == trg, "Wrong target.");
92
	check(++con == INVALID, "There is more connecting arc.");
93
      }
94
    }
95
    AllArcLookUp<SmartDigraph> el(fg);
96
    for (SmartDigraph::NodeIt src(fg); src != INVALID; ++src) {
97
      for (SmartDigraph::NodeIt trg(fg); trg != INVALID; ++trg) {
98
	SmartDigraph::Arc con = el(src, trg);
99
	check(con != INVALID, "There is no connecting arc.");
100
	check(fg.source(con) == src, "Wrong source.");
101
	check(fg.target(con) == trg, "Wrong target.");
102
	check(el(src,trg,con) == INVALID, "There is more connecting arc.");
103
      }
104
    }
105
  }
106

	
107
  //check In/OutDegMap (and Snapshot feature)
108

	
109
  checkSnapDeg<ListDigraph>();
110
  checkSnapDeg<SmartDigraph>();
111
  
112
  {
113
    const int nodeNum = 10;
114
    const int arcNum = 100;
115
    ListDigraph digraph;
116
    InDegMap<ListDigraph> inDeg(digraph);
117
    OutDegMap<ListDigraph> outDeg(digraph);
118
    std::vector<ListDigraph::Node> nodes(nodeNum);
119
    for (int i = 0; i < nodeNum; ++i) {
120
      nodes[i] = digraph.addNode();
121
    }
122
    std::vector<ListDigraph::Arc> arcs(arcNum);
123
    for (int i = 0; i < arcNum; ++i) {
124
      arcs[i] = 
125
	digraph.addArc(nodes[rnd[nodeNum]], nodes[rnd[nodeNum]]);
126
    }
127
    for (int i = 0; i < nodeNum; ++i) {
128
      check(inDeg[nodes[i]] == countInArcs(digraph, nodes[i]), 
129
	    "Wrong in degree map");
130
    }
131
    for (int i = 0; i < nodeNum; ++i) {
132
      check(outDeg[nodes[i]] == countOutArcs(digraph, nodes[i]), 
133
	    "Wrong in degree map");
134
    }
135
  }
136

	
137
  ///Everything is OK
138
  std::cout << __FILE__ ": All tests passed.\n";
139

	
140
  return 0;
141
}
Ignore white space 6 line context
1
/* -*- C++ -*-
2
 *
3
 * This file is a part of LEMON, a generic C++ optimization library
4
 *
5
 * Copyright (C) 2003-2008
6
 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
7
 * (Egervary Research Group on Combinatorial Optimization, EGRES).
8
 *
9
 * Permission to use, modify and distribute this software is granted
10
 * provided that this copyright notice appears in all copies. For
11
 * precise terms see the accompanying LICENSE file.
12
 *
13
 * This software is provided "AS IS" with no warranty of any kind,
14
 * express or implied, and with no claim as to its suitability for any
15
 * purpose.
16
 *
17
 */
18

	
19
#ifndef LEMON_TEST_GRAPH_UTILS_TEST_H
20
#define LEMON_TEST_GRAPH_UTILS_TEST_H
21

	
22

	
23
#include "test_tools.h"
24
#include <cstdlib>
25
#include <ctime>
26

	
27
//! \ingroup misc
28
//! \file
29
//! \brief Test cases for graph utils.
30
namespace lemon {
31
  
32
  template <typename Digraph>
33
  void checkDigraphCounters() {
34
    const int num = 5;
35
    Digraph digraph;
36
    addPetersen(digraph, num);
37
    bidirDigraph(digraph);
38
    check(countNodes(digraph) == 2*num, "Wrong node number.");
39
    check(countArcs(digraph) == 6*num, "Wrong arc number.");    
40
    for (typename Digraph::NodeIt it(digraph); it != INVALID; ++it) {
41
      check(countOutArcs(digraph, it) == 3, "Wrong out degree number.");
42
      check(countInArcs(digraph, it) == 3, "Wrong in degree number.");
43
    }
44
  }
45

	
46
  template <typename Digraph>
47
  void checkFindArc() {
48
    typedef typename Digraph::Node Node;
49
    typedef typename Digraph::Arc Arc;
50
    typedef typename Digraph::NodeIt NodeIt;
51
    typedef typename Digraph::ArcIt ArcIt;
52
    Digraph digraph;
53
    for (int i = 0; i < 10; ++i) {
54
      digraph.addNode();
55
    }
56
    DescriptorMap<Digraph, Node> nodes(digraph);
57
    typename DescriptorMap<Digraph, Node>::InverseMap invNodes(nodes);
58
    for (int i = 0; i < 100; ++i) {
59
      int src = rnd[invNodes.size()];
60
      int trg = rnd[invNodes.size()];
61
      digraph.addArc(invNodes[src], invNodes[trg]);
62
    }
63
    typename Digraph::template ArcMap<bool> found(digraph, false);
64
    DescriptorMap<Digraph, Arc> arcs(digraph);
65
    for (NodeIt src(digraph); src != INVALID; ++src) {
66
      for (NodeIt trg(digraph); trg != INVALID; ++trg) {
67
	for (ConArcIt<Digraph> con(digraph, src, trg); con != INVALID; ++con) {
68
	  check(digraph.source(con) == src, "Wrong source.");
69
	  check(digraph.target(con) == trg, "Wrong target.");
70
	  check(found[con] == false, "The arc found already.");
71
	  found[con] = true;
72
	}
73
      }
74
    }
75
    for (ArcIt it(digraph); it != INVALID; ++it) {
76
      check(found[it] == true, "The arc is not found.");
77
    }
78
  }
79
  
80
} //namespace lemon
81

	
82

	
83
#endif
Ignore white space 6 line context
... ...
@@ -216,27 +216,27 @@
216 216
  };
217 217

	
218 218
  template <typename Graph, typename Enable = void>
219
  struct ArcNumTagIndicator {
219
  struct EdgeNumTagIndicator {
220 220
    static const bool value = false;
221 221
  };
222 222

	
223 223
  template <typename Graph>
224
  struct ArcNumTagIndicator<
224
  struct EdgeNumTagIndicator<
225 225
    Graph, 
226
    typename enable_if<typename Graph::ArcNumTag, void>::type
226
    typename enable_if<typename Graph::EdgeNumTag, void>::type
227 227
  > {
228 228
    static const bool value = true;
229 229
  };
230 230

	
231 231
  template <typename Graph, typename Enable = void>
232
  struct FindArcTagIndicator {
232
  struct FindEdgeTagIndicator {
233 233
    static const bool value = false;
234 234
  };
235 235

	
236 236
  template <typename Graph>
237
  struct FindArcTagIndicator<
237
  struct FindEdgeTagIndicator<
238 238
    Graph, 
239
    typename enable_if<typename Graph::FindArcTag, void>::type
239
    typename enable_if<typename Graph::FindEdgeTag, void>::type
240 240
  > {
241 241
    static const bool value = true;
242 242
  };
Ignore white space 6 line context
... ...
@@ -35,7 +35,7 @@
35 35

	
36 36
///\ingroup gutils
37 37
///\file
38
///\brief Digraph utilities.
38
///\brief Graph utilities.
39 39

	
40 40
namespace lemon {
41 41

	
... ...
@@ -46,71 +46,36 @@
46 46

	
47 47
  ///This \c \#define creates convenience typedefs for the following types
48 48
  ///of \c Digraph: \c Node,  \c NodeIt, \c Arc, \c ArcIt, \c InArcIt,
49
  ///\c OutArcIt
50
  ///\note If \c G it a template parameter, it should be used in this way.
51
  ///\code
52
  ///  GRAPH_TYPEDEFS(typename G);
53
  ///\endcode
54
  ///
55
  ///\warning There are no typedefs for the digraph maps because of the lack of
56
  ///template typedefs in C++.
57
#define GRAPH_TYPEDEFS(Digraph)				\
58
  typedef Digraph::     Node      Node;			\
59
    typedef Digraph::   NodeIt    NodeIt;			\
60
    typedef Digraph::   Arc      Arc;			\
61
    typedef Digraph::   ArcIt    ArcIt;			\
62
    typedef Digraph:: InArcIt  InArcIt;			\
63
    typedef Digraph::OutArcIt OutArcIt
49
  ///\c OutArcIt, \c BoolNodeMap, \c IntNodeMap, \c DoubleNodeMap, 
50
  ///\c BoolArcMap, \c IntArcMap, \c DoubleArcMap. 
51
#define DIGRAPH_TYPEDEFS(Digraph)					\
52
  typedef Digraph::Node Node;						\
53
  typedef Digraph::NodeIt NodeIt;					\
54
  typedef Digraph::Arc Arc;						\
55
  typedef Digraph::ArcIt ArcIt;						\
56
  typedef Digraph::InArcIt InArcIt;					\
57
  typedef Digraph::OutArcIt OutArcIt
64 58

	
65 59
  ///Creates convenience typedefs for the graph types and iterators
66 60

	
67
  ///This \c \#define creates the same convenience typedefs as defined by
68
  ///\ref GRAPH_TYPEDEFS(Digraph) and three more, namely it creates
69
  ///\c Edge, \c EdgeIt, \c IncArcIt,
61
  ///This \c \#define creates the same convenience typedefs as defined
62
  ///by \ref DIGRAPH_TYPEDEFS(Graph) and six more, namely it creates
63
  ///\c Edge, \c EdgeIt, \c IncEdgeIt, \c BoolEdgeMap, \c IntEdgeMap,
64
  ///\c DoubleEdgeMap.
65
#define GRAPH_TYPEDEFS(Graph)						\
66
  DIGRAPH_TYPEDEFS(Graph);						\
67
  typedef Graph::Edge Edge;						\
68
  typedef Graph::EdgeIt EdgeIt;						\
69
  typedef Graph::IncEdgeIt IncEdgeIt
70

	
71
  /// \brief Function to count the items in the graph.
70 72
  ///
71
  ///\note If \c G it a template parameter, it should be used in this way.
72
  ///\code
73
  ///  UGRAPH_TYPEDEFS(typename G);
74
  ///\endcode
75
  ///
76
  ///\warning There are no typedefs for the digraph maps because of the lack of
77
  ///template typedefs in C++.
78
#define UGRAPH_TYPEDEFS(Digraph)				\
79
  GRAPH_TYPEDEFS(Digraph);				\
80
    typedef Digraph:: Edge   Edge;			\
81
    typedef Digraph:: EdgeIt EdgeIt;			\
82
    typedef Digraph:: IncArcIt   IncArcIt
83

	
84
  ///\brief Creates convenience typedefs for the bipartite digraph 
85
  ///types and iterators
86

	
87
  ///This \c \#define creates the same convenience typedefs as defined by
88
  ///\ref UGRAPH_TYPEDEFS(Digraph) and two more, namely it creates
89
  ///\c RedIt, \c BlueIt, 
90
  ///
91
  ///\note If \c G it a template parameter, it should be used in this way.
92
  ///\code
93
  ///  BPUGRAPH_TYPEDEFS(typename G);
94
  ///\endcode
95
  ///
96
  ///\warning There are no typedefs for the digraph maps because of the lack of
97
  ///template typedefs in C++.
98
#define BPUGRAPH_TYPEDEFS(Digraph)            \
99
  UGRAPH_TYPEDEFS(Digraph);		    \
100
    typedef Digraph::Red Red;             \
101
    typedef Digraph::Blue Blue;             \
102
    typedef Digraph::RedIt RedIt;	    \
103
    typedef Digraph::BlueIt BlueIt
104

	
105
  /// \brief Function to count the items in the digraph.
106
  ///
107
  /// This function counts the items (nodes, arcs etc) in the digraph.
73
  /// This function counts the items (nodes, arcs etc) in the graph.
108 74
  /// The complexity of the function is O(n) because
109 75
  /// it iterates on all of the items.
110

	
111
  template <typename Digraph, typename Item>
112
  inline int countItems(const Digraph& g) {
113
    typedef typename ItemSetTraits<Digraph, Item>::ItemIt ItemIt;
76
  template <typename Graph, typename Item>
77
  inline int countItems(const Graph& g) {
78
    typedef typename ItemSetTraits<Graph, Item>::ItemIt ItemIt;
114 79
    int num = 0;
115 80
    for (ItemIt it(g); it != INVALID; ++it) {
116 81
      ++num;
... ...
@@ -120,184 +85,115 @@
120 85

	
121 86
  // Node counting:
122 87

	
123
  namespace _digraph_utils_bits {
88
  namespace _graph_utils_bits {
124 89
    
125
    template <typename Digraph, typename Enable = void>
90
    template <typename Graph, typename Enable = void>
126 91
    struct CountNodesSelector {
127
      static int count(const Digraph &g) {
128
        return countItems<Digraph, typename Digraph::Node>(g);
92
      static int count(const Graph &g) {
93
        return countItems<Graph, typename Graph::Node>(g);
129 94
      }
130 95
    };
131 96

	
132
    template <typename Digraph>
97
    template <typename Graph>
133 98
    struct CountNodesSelector<
134
      Digraph, typename 
135
      enable_if<typename Digraph::NodeNumTag, void>::type> 
99
      Graph, typename 
100
      enable_if<typename Graph::NodeNumTag, void>::type> 
136 101
    {
137
      static int count(const Digraph &g) {
102
      static int count(const Graph &g) {
138 103
        return g.nodeNum();
139 104
      }
140 105
    };    
141 106
  }
142 107

	
143
  /// \brief Function to count the nodes in the digraph.
108
  /// \brief Function to count the nodes in the graph.
144 109
  ///
145
  /// This function counts the nodes in the digraph.
110
  /// This function counts the nodes in the graph.
146 111
  /// The complexity of the function is O(n) but for some
147
  /// digraph structures it is specialized to run in O(1).
112
  /// graph structures it is specialized to run in O(1).
148 113
  ///
149
  /// If the digraph contains a \e nodeNum() member function and a 
114
  /// If the graph contains a \e nodeNum() member function and a 
150 115
  /// \e NodeNumTag tag then this function calls directly the member
151 116
  /// function to query the cardinality of the node set.
152
  template <typename Digraph>
153
  inline int countNodes(const Digraph& g) {
154
    return _digraph_utils_bits::CountNodesSelector<Digraph>::count(g);
117
  template <typename Graph>
118
  inline int countNodes(const Graph& g) {
119
    return _graph_utils_bits::CountNodesSelector<Graph>::count(g);
155 120
  }
156 121

	
157
  namespace _digraph_utils_bits {
122
  // Arc counting:
123

	
124
  namespace _graph_utils_bits {
158 125
    
159
    template <typename Digraph, typename Enable = void>
160
    struct CountRedsSelector {
161
      static int count(const Digraph &g) {
162
        return countItems<Digraph, typename Digraph::Red>(g);
126
    template <typename Graph, typename Enable = void>
127
    struct CountArcsSelector {
128
      static int count(const Graph &g) {
129
        return countItems<Graph, typename Graph::Arc>(g);
163 130
      }
164 131
    };
165 132

	
166
    template <typename Digraph>
167
    struct CountRedsSelector<
168
      Digraph, typename 
169
      enable_if<typename Digraph::NodeNumTag, void>::type> 
133
    template <typename Graph>
134
    struct CountArcsSelector<
135
      Graph, 
136
      typename enable_if<typename Graph::ArcNumTag, void>::type> 
170 137
    {
171
      static int count(const Digraph &g) {
172
        return g.redNum();
173
      }
174
    };    
175
  }
176

	
177
  /// \brief Function to count the reds in the digraph.
178
  ///
179
  /// This function counts the reds in the digraph.
180
  /// The complexity of the function is O(an) but for some
181
  /// digraph structures it is specialized to run in O(1).
182
  ///
183
  /// If the digraph contains an \e redNum() member function and a 
184
  /// \e NodeNumTag tag then this function calls directly the member
185
  /// function to query the cardinality of the A-node set.
186
  template <typename Digraph>
187
  inline int countReds(const Digraph& g) {
188
    return _digraph_utils_bits::CountRedsSelector<Digraph>::count(g);
189
  }
190

	
191
  namespace _digraph_utils_bits {
192
    
193
    template <typename Digraph, typename Enable = void>
194
    struct CountBluesSelector {
195
      static int count(const Digraph &g) {
196
        return countItems<Digraph, typename Digraph::Blue>(g);
197
      }
198
    };
199

	
200
    template <typename Digraph>
201
    struct CountBluesSelector<
202
      Digraph, typename 
203
      enable_if<typename Digraph::NodeNumTag, void>::type> 
204
    {
205
      static int count(const Digraph &g) {
206
        return g.blueNum();
207
      }
208
    };    
209
  }
210

	
211
  /// \brief Function to count the blues in the digraph.
212
  ///
213
  /// This function counts the blues in the digraph.
214
  /// The complexity of the function is O(bn) but for some
215
  /// digraph structures it is specialized to run in O(1).
216
  ///
217
  /// If the digraph contains a \e blueNum() member function and a 
218
  /// \e NodeNumTag tag then this function calls directly the member
219
  /// function to query the cardinality of the B-node set.
220
  template <typename Digraph>
221
  inline int countBlues(const Digraph& g) {
222
    return _digraph_utils_bits::CountBluesSelector<Digraph>::count(g);
223
  }
224

	
225

	
226
  // Arc counting:
227

	
228
  namespace _digraph_utils_bits {
229
    
230
    template <typename Digraph, typename Enable = void>
231
    struct CountArcsSelector {
232
      static int count(const Digraph &g) {
233
        return countItems<Digraph, typename Digraph::Arc>(g);
234
      }
235
    };
236

	
237
    template <typename Digraph>
238
    struct CountArcsSelector<
239
      Digraph, 
240
      typename enable_if<typename Digraph::ArcNumTag, void>::type> 
241
    {
242
      static int count(const Digraph &g) {
138
      static int count(const Graph &g) {
243 139
        return g.arcNum();
244 140
      }
245 141
    };    
246 142
  }
247 143

	
248
  /// \brief Function to count the arcs in the digraph.
144
  /// \brief Function to count the arcs in the graph.
249 145
  ///
250
  /// This function counts the arcs in the digraph.
146
  /// This function counts the arcs in the graph.
251 147
  /// The complexity of the function is O(e) but for some
252
  /// digraph structures it is specialized to run in O(1).
148
  /// graph structures it is specialized to run in O(1).
253 149
  ///
254
  /// If the digraph contains a \e arcNum() member function and a 
255
  /// \e ArcNumTag tag then this function calls directly the member
150
  /// If the graph contains a \e arcNum() member function and a 
151
  /// \e EdgeNumTag tag then this function calls directly the member
256 152
  /// function to query the cardinality of the arc set.
257
  template <typename Digraph>
258
  inline int countArcs(const Digraph& g) {
259
    return _digraph_utils_bits::CountArcsSelector<Digraph>::count(g);
153
  template <typename Graph>
154
  inline int countArcs(const Graph& g) {
155
    return _graph_utils_bits::CountArcsSelector<Graph>::count(g);
260 156
  }
261 157

	
262
  // Undirected arc counting:
263
  namespace _digraph_utils_bits {
158
  // Edge counting:
159
  namespace _graph_utils_bits {
264 160
    
265
    template <typename Digraph, typename Enable = void>
161
    template <typename Graph, typename Enable = void>
266 162
    struct CountEdgesSelector {
267
      static int count(const Digraph &g) {
268
        return countItems<Digraph, typename Digraph::Edge>(g);
163
      static int count(const Graph &g) {
164
        return countItems<Graph, typename Graph::Edge>(g);
269 165
      }
270 166
    };
271 167

	
272
    template <typename Digraph>
168
    template <typename Graph>
273 169
    struct CountEdgesSelector<
274
      Digraph, 
275
      typename enable_if<typename Digraph::ArcNumTag, void>::type> 
170
      Graph, 
171
      typename enable_if<typename Graph::EdgeNumTag, void>::type> 
276 172
    {
277
      static int count(const Digraph &g) {
173
      static int count(const Graph &g) {
278 174
        return g.edgeNum();
279 175
      }
280 176
    };    
281 177
  }
282 178

	
283
  /// \brief Function to count the edges in the digraph.
179
  /// \brief Function to count the edges in the graph.
284 180
  ///
285
  /// This function counts the edges in the digraph.
286
  /// The complexity of the function is O(e) but for some
287
  /// digraph structures it is specialized to run in O(1).
181
  /// This function counts the edges in the graph.
182
  /// The complexity of the function is O(m) but for some
183
  /// graph structures it is specialized to run in O(1).
288 184
  ///
289
  /// If the digraph contains a \e edgeNum() member function and a 
290
  /// \e ArcNumTag tag then this function calls directly the member
185
  /// If the graph contains a \e edgeNum() member function and a 
186
  /// \e EdgeNumTag tag then this function calls directly the member
291 187
  /// function to query the cardinality of the edge set.
292
  template <typename Digraph>
293
  inline int countEdges(const Digraph& g) {
294
    return _digraph_utils_bits::CountEdgesSelector<Digraph>::count(g);
188
  template <typename Graph>
189
  inline int countEdges(const Graph& g) {
190
    return _graph_utils_bits::CountEdgesSelector<Graph>::count(g);
295 191

	
296 192
  }
297 193

	
298 194

	
299
  template <typename Digraph, typename DegIt>
300
  inline int countNodeDegree(const Digraph& _g, const typename Digraph::Node& _n) {
195
  template <typename Graph, typename DegIt>
196
  inline int countNodeDegree(const Graph& _g, const typename Graph::Node& _n) {
301 197
    int num = 0;
302 198
    for (DegIt it(_g, _n); it != INVALID; ++it) {
303 199
      ++num;
... ...
@@ -308,37 +204,37 @@
308 204
  /// \brief Function to count the number of the out-arcs from node \c n.
309 205
  ///
310 206
  /// This function counts the number of the out-arcs from node \c n
311
  /// in the digraph.  
312
  template <typename Digraph>
313
  inline int countOutArcs(const Digraph& _g,  const typename Digraph::Node& _n) {
314
    return countNodeDegree<Digraph, typename Digraph::OutArcIt>(_g, _n);
207
  /// in the graph.  
208
  template <typename Graph>
209
  inline int countOutArcs(const Graph& _g,  const typename Graph::Node& _n) {
210
    return countNodeDegree<Graph, typename Graph::OutArcIt>(_g, _n);
315 211
  }
316 212

	
317 213
  /// \brief Function to count the number of the in-arcs to node \c n.
318 214
  ///
319 215
  /// This function counts the number of the in-arcs to node \c n
320
  /// in the digraph.  
321
  template <typename Digraph>
322
  inline int countInArcs(const Digraph& _g,  const typename Digraph::Node& _n) {
323
    return countNodeDegree<Digraph, typename Digraph::InArcIt>(_g, _n);
216
  /// in the graph.  
217
  template <typename Graph>
218
  inline int countInArcs(const Graph& _g,  const typename Graph::Node& _n) {
219
    return countNodeDegree<Graph, typename Graph::InArcIt>(_g, _n);
324 220
  }
325 221

	
326
  /// \brief Function to count the number of the inc-arcs to node \c n.
222
  /// \brief Function to count the number of the inc-edges to node \c n.
327 223
  ///
328
  /// This function counts the number of the inc-arcs to node \c n
329
  /// in the digraph.  
330
  template <typename Digraph>
331
  inline int countIncArcs(const Digraph& _g,  const typename Digraph::Node& _n) {
332
    return countNodeDegree<Digraph, typename Digraph::IncArcIt>(_g, _n);
224
  /// This function counts the number of the inc-edges to node \c n
225
  /// in the graph.  
226
  template <typename Graph>
227
  inline int countIncEdges(const Graph& _g,  const typename Graph::Node& _n) {
228
    return countNodeDegree<Graph, typename Graph::IncEdgeIt>(_g, _n);
333 229
  }
334 230

	
335
  namespace _digraph_utils_bits {
231
  namespace _graph_utils_bits {
336 232
    
337
    template <typename Digraph, typename Enable = void>
233
    template <typename Graph, typename Enable = void>
338 234
    struct FindArcSelector {
339
      typedef typename Digraph::Node Node;
340
      typedef typename Digraph::Arc Arc;
341
      static Arc find(const Digraph &g, Node u, Node v, Arc e) {
235
      typedef typename Graph::Node Node;
236
      typedef typename Graph::Arc Arc;
237
      static Arc find(const Graph &g, Node u, Node v, Arc e) {
342 238
        if (e == INVALID) {
343 239
          g.firstOut(e, u);
344 240
        } else {
... ...
@@ -351,22 +247,22 @@
351 247
      }
352 248
    };
353 249

	
354
    template <typename Digraph>
250
    template <typename Graph>
355 251
    struct FindArcSelector<
356
      Digraph, 
357
      typename enable_if<typename Digraph::FindArcTag, void>::type> 
252
      Graph, 
253
      typename enable_if<typename Graph::FindEdgeTag, void>::type> 
358 254
    {
359
      typedef typename Digraph::Node Node;
360
      typedef typename Digraph::Arc Arc;
361
      static Arc find(const Digraph &g, Node u, Node v, Arc prev) {
255
      typedef typename Graph::Node Node;
256
      typedef typename Graph::Arc Arc;
257
      static Arc find(const Graph &g, Node u, Node v, Arc prev) {
362 258
        return g.findArc(u, v, prev);
363 259
      }
364 260
    };    
365 261
  }
366 262

	
367
  /// \brief Finds an arc between two nodes of a digraph.
263
  /// \brief Finds an arc between two nodes of a graph.
368 264
  ///
369
  /// Finds an arc from node \c u to node \c v in digraph \c g.
265
  /// Finds an arc from node \c u to node \c v in graph \c g.
370 266
  ///
371 267
  /// If \c prev is \ref INVALID (this is the default value), then
372 268
  /// it finds the first arc from \c u to \c v. Otherwise it looks for
... ...
@@ -384,11 +280,11 @@
384 280
  ///\sa AllArcLookUp
385 281
  ///\sa DynArcLookUp
386 282
  ///\sa ConArcIt
387
  template <typename Digraph>
388
  inline typename Digraph::Arc 
389
  findArc(const Digraph &g, typename Digraph::Node u, typename Digraph::Node v,
390
           typename Digraph::Arc prev = INVALID) {
391
    return _digraph_utils_bits::FindArcSelector<Digraph>::find(g, u, v, prev);
283
  template <typename Graph>
284
  inline typename Graph::Arc 
285
  findArc(const Graph &g, typename Graph::Node u, typename Graph::Node v,
286
           typename Graph::Arc prev = INVALID) {
287
    return _graph_utils_bits::FindArcSelector<Graph>::find(g, u, v, prev);
392 288
  }
393 289

	
394 290
  /// \brief Iterator for iterating on arcs connected the same nodes.
... ...
@@ -397,7 +293,7 @@
397 293
  /// higher level interface for the findArc() function. You can
398 294
  /// use it the following way:
399 295
  ///\code
400
  /// for (ConArcIt<Digraph> it(g, src, trg); it != INVALID; ++it) {
296
  /// for (ConArcIt<Graph> it(g, src, trg); it != INVALID; ++it) {
401 297
  ///   ...
402 298
  /// }
403 299
  ///\endcode
... ...
@@ -408,49 +304,49 @@
408 304
  ///\sa DynArcLookUp
409 305
  ///
410 306
  /// \author Balazs Dezso 
411
  template <typename _Digraph>
412
  class ConArcIt : public _Digraph::Arc {
307
  template <typename _Graph>
308
  class ConArcIt : public _Graph::Arc {
413 309
  public:
414 310

	
415
    typedef _Digraph Digraph;
416
    typedef typename Digraph::Arc Parent;
311
    typedef _Graph Graph;
312
    typedef typename Graph::Arc Parent;
417 313

	
418
    typedef typename Digraph::Arc Arc;
419
    typedef typename Digraph::Node Node;
314
    typedef typename Graph::Arc Arc;
315
    typedef typename Graph::Node Node;
420 316

	
421 317
    /// \brief Constructor.
422 318
    ///
423 319
    /// Construct a new ConArcIt iterating on the arcs which
424 320
    /// connects the \c u and \c v node.
425
    ConArcIt(const Digraph& g, Node u, Node v) : digraph(g) {
426
      Parent::operator=(findArc(digraph, u, v));
321
    ConArcIt(const Graph& g, Node u, Node v) : _graph(g) {
322
      Parent::operator=(findArc(_graph, u, v));
427 323
    }
428 324

	
429 325
    /// \brief Constructor.
430 326
    ///
431 327
    /// Construct a new ConArcIt which continues the iterating from 
432 328
    /// the \c e arc.
433
    ConArcIt(const Digraph& g, Arc e) : Parent(e), digraph(g) {}
329
    ConArcIt(const Graph& g, Arc a) : Parent(a), _graph(g) {}
434 330
    
435 331
    /// \brief Increment operator.
436 332
    ///
437 333
    /// It increments the iterator and gives back the next arc.
438 334
    ConArcIt& operator++() {
439
      Parent::operator=(findArc(digraph, digraph.source(*this), 
440
				 digraph.target(*this), *this));
335
      Parent::operator=(findArc(_graph, _graph.source(*this), 
336
				_graph.target(*this), *this));
441 337
      return *this;
442 338
    }
443 339
  private:
444
    const Digraph& digraph;
340
    const Graph& _graph;
445 341
  };
446 342

	
447
  namespace _digraph_utils_bits {
343
  namespace _graph_utils_bits {
448 344
    
449
    template <typename Digraph, typename Enable = void>
345
    template <typename Graph, typename Enable = void>
450 346
    struct FindEdgeSelector {
451
      typedef typename Digraph::Node Node;
452
      typedef typename Digraph::Edge Edge;
453
      static Edge find(const Digraph &g, Node u, Node v, Edge e) {
347
      typedef typename Graph::Node Node;
348
      typedef typename Graph::Edge Edge;
349
      static Edge find(const Graph &g, Node u, Node v, Edge e) {
454 350
        bool b;
455 351
        if (u != v) {
456 352
          if (e == INVALID) {
... ...
@@ -477,24 +373,24 @@
477 373
      }
478 374
    };
479 375

	
480
    template <typename Digraph>
376
    template <typename Graph>
481 377
    struct FindEdgeSelector<
482
      Digraph, 
483
      typename enable_if<typename Digraph::FindArcTag, void>::type> 
378
      Graph, 
379
      typename enable_if<typename Graph::FindEdgeTag, void>::type> 
484 380
    {
485
      typedef typename Digraph::Node Node;
486
      typedef typename Digraph::Edge Edge;
487
      static Edge find(const Digraph &g, Node u, Node v, Edge prev) {
381
      typedef typename Graph::Node Node;
382
      typedef typename Graph::Edge Edge;
383
      static Edge find(const Graph &g, Node u, Node v, Edge prev) {
488 384
        return g.findEdge(u, v, prev);
489 385
      }
490 386
    };    
491 387
  }
492 388

	
493
  /// \brief Finds an edge between two nodes of a digraph.
389
  /// \brief Finds an edge between two nodes of a graph.
494 390
  ///
495
  /// Finds an edge from node \c u to node \c v in digraph \c g.
496
  /// If the node \c u and node \c v is equal then each loop arc
497
  /// will be enumerated.
391
  /// Finds an edge from node \c u to node \c v in graph \c g.
392
  /// If the node \c u and node \c v is equal then each loop edge
393
  /// will be enumerated once.
498 394
  ///
499 395
  /// If \c prev is \ref INVALID (this is the default value), then
500 396
  /// it finds the first arc from \c u to \c v. Otherwise it looks for
... ...
@@ -511,11 +407,11 @@
511 407
  ///
512 408
  ///\sa ConArcIt
513 409

	
514
  template <typename Digraph>
515
  inline typename Digraph::Edge 
516
  findEdge(const Digraph &g, typename Digraph::Node u, typename Digraph::Node v,
517
            typename Digraph::Edge p = INVALID) {
518
    return _digraph_utils_bits::FindEdgeSelector<Digraph>::find(g, u, v, p);
410
  template <typename Graph>
411
  inline typename Graph::Edge 
412
  findEdge(const Graph &g, typename Graph::Node u, typename Graph::Node v,
413
            typename Graph::Edge p = INVALID) {
414
    return _graph_utils_bits::FindEdgeSelector<Graph>::find(g, u, v, p);
519 415
  }
520 416

	
521 417
  /// \brief Iterator for iterating on edges connected the same nodes.
... ...
@@ -524,7 +420,7 @@
524 420
  /// higher level interface for the findEdge() function. You can
525 421
  /// use it the following way:
526 422
  ///\code
527
  /// for (ConEdgeIt<Digraph> it(g, src, trg); it != INVALID; ++it) {
423
  /// for (ConEdgeIt<Graph> it(g, src, trg); it != INVALID; ++it) {
528 424
  ///   ...
529 425
  /// }
530 426
  ///\endcode
... ...
@@ -532,68 +428,43 @@
532 428
  ///\sa findEdge()
533 429
  ///
534 430
  /// \author Balazs Dezso 
535
  template <typename _Digraph>
536
  class ConEdgeIt : public _Digraph::Edge {
431
  template <typename _Graph>
432
  class ConEdgeIt : public _Graph::Edge {
537 433
  public:
538 434

	
539
    typedef _Digraph Digraph;
540
    typedef typename Digraph::Edge Parent;
435
    typedef _Graph Graph;
436
    typedef typename Graph::Edge Parent;
541 437

	
542
    typedef typename Digraph::Edge Edge;
543
    typedef typename Digraph::Node Node;
438
    typedef typename Graph::Edge Edge;
439
    typedef typename Graph::Node Node;
544 440

	
545 441
    /// \brief Constructor.
546 442
    ///
547
    /// Construct a new ConEdgeIt iterating on the arcs which
443
    /// Construct a new ConEdgeIt iterating on the edges which
548 444
    /// connects the \c u and \c v node.
549
    ConEdgeIt(const Digraph& g, Node u, Node v) : digraph(g) {
550
      Parent::operator=(findEdge(digraph, u, v));
445
    ConEdgeIt(const Graph& g, Node u, Node v) : _graph(g) {
446
      Parent::operator=(findEdge(_graph, u, v));
551 447
    }
552 448

	
553 449
    /// \brief Constructor.
554 450
    ///
555 451
    /// Construct a new ConEdgeIt which continues the iterating from 
556
    /// the \c e arc.
557
    ConEdgeIt(const Digraph& g, Edge e) : Parent(e), digraph(g) {}
452
    /// the \c e edge.
453
    ConEdgeIt(const Graph& g, Edge e) : Parent(e), _graph(g) {}
558 454
    
559 455
    /// \brief Increment operator.
560 456
    ///
561
    /// It increments the iterator and gives back the next arc.
457
    /// It increments the iterator and gives back the next edge.
562 458
    ConEdgeIt& operator++() {
563
      Parent::operator=(findEdge(digraph, digraph.source(*this), 
564
				      digraph.target(*this), *this));
459
      Parent::operator=(findEdge(_graph, _graph.source(*this), 
460
				 _graph.target(*this), *this));
565 461
      return *this;
566 462
    }
567 463
  private:
568
    const Digraph& digraph;
464
    const Graph& _graph;
569 465
  };
570 466

	
571
  /// \brief Copy a map.
572
  ///
573
  /// This function copies the \c from map to the \c to map. It uses the
574
  /// given iterator to iterate on the data structure and it uses the \c ref
575
  /// mapping to convert the from's keys to the to's keys.
576
  template <typename To, typename From, 
577
	    typename ItemIt, typename Ref>	    
578
  void copyMap(To& to, const From& from, 
579
	       ItemIt it, const Ref& ref) {
580
    for (; it != INVALID; ++it) {
581
      to[ref[it]] = from[it];
582
    }
583
  }
584

	
585
  /// \brief Copy the from map to the to map.
586
  ///
587
  /// Copy the \c from map to the \c to map. It uses the given iterator
588
  /// to iterate on the data structure.
589
  template <typename To, typename From, typename ItemIt>	    
590
  void copyMap(To& to, const From& from, ItemIt it) {
591
    for (; it != INVALID; ++it) {
592
      to[it] = from[it];
593
    }
594
  }
595

	
596
  namespace _digraph_utils_bits {
467
  namespace _graph_utils_bits {
597 468

	
598 469
    template <typename Digraph, typename Item, typename RefMap>
599 470
    class MapCopyBase {
... ...
@@ -727,47 +598,43 @@
727 598
      }
728 599
    };
729 600

	
730
    template <typename BpGraph, typename Enable = void>
731
    struct BpGraphCopySelector {
732
      template <typename From, typename RedRefMap, 
733
                typename BlueRefMap, typename EdgeRefMap>
734
      static void copy(BpGraph &to, const From& from,
735
                       RedRefMap& redRefMap, BlueRefMap& blueRefMap,
736
                       EdgeRefMap& edgeRefMap) {
737
        for (typename From::RedIt it(from); it != INVALID; ++it) {
738
          redRefMap[it] = to.addRed();
739
        }
740
        for (typename From::BlueIt it(from); it != INVALID; ++it) {
741
          blueRefMap[it] = to.addBlue();
742
        }
743
        for (typename From::EdgeIt it(from); it != INVALID; ++it) {
744
          edgeRefMap[it] = to.addArc(redRefMap[from.red(it)], 
745
                                           blueRefMap[from.blue(it)]);
746
        }
747
      }
748
    };
749

	
750
    template <typename BpGraph>
751
    struct BpGraphCopySelector<
752
      BpGraph, 
753
      typename enable_if<typename BpGraph::BuildTag, void>::type> 
754
    {
755
      template <typename From, typename RedRefMap, 
756
                typename BlueRefMap, typename EdgeRefMap>
757
      static void copy(BpGraph &to, const From& from,
758
                       RedRefMap& redRefMap, BlueRefMap& blueRefMap,
759
                       EdgeRefMap& edgeRefMap) {
760
        to.build(from, redRefMap, blueRefMap, edgeRefMap);
761
      }
762
    };
763
    
764

	
765 601
  }
766 602

	
767 603
  /// \brief Class to copy a digraph.
768 604
  ///
769 605
  /// Class to copy a digraph to another digraph (duplicate a digraph). The
770 606
  /// simplest way of using it is through the \c copyDigraph() function.
607
  ///
608
  /// This class not just make a copy of a graph, but it can create
609
  /// references and cross references between the nodes and arcs of
610
  /// the two graphs, it can copy maps for use with the newly created
611
  /// graph and copy nodes and arcs.
612
  ///
613
  /// To make a copy from a graph, first an instance of DigraphCopy
614
  /// should be created, then the data belongs to the graph should
615
  /// assigned to copy. In the end, the \c run() member should be
616
  /// called.
617
  ///
618
  /// The next code copies a graph with several data:
619
  ///\code
620
  ///  DigraphCopy<NewGraph, OrigGraph> dc(new_graph, orig_graph);
621
  ///  // create a reference for the nodes
622
  ///  OrigGraph::NodeMap<NewGraph::Node> nr(orig_graph);
623
  ///  dc.nodeRef(nr);
624
  ///  // create a cross reference (inverse) for the arcs
625
  ///  NewGraph::ArcMap<OrigGraph::Arc> acr(new_graph);
626
  ///  dc.arcCrossRef(acr);
627
  ///  // copy an arc map
628
  ///  OrigGraph::ArcMap<double> oamap(orig_graph);
629
  ///  NewGraph::ArcMap<double> namap(new_graph);
630
  ///  dc.arcMap(namap, oamap);
631
  ///  // copy a node
632
  ///  OrigGraph::Node on;
633
  ///  NewGraph::Node nn;
634
  ///  dc.node(nn, on);
635
  ///  // Executions of copy
636
  ///  dc.run();
637
  ///\endcode
771 638
  template <typename To, typename From>
772 639
  class DigraphCopy {
773 640
  private:
... ...
@@ -791,53 +658,57 @@
791 658
    ///
792 659
    /// It copies the content of the \c _from digraph into the
793 660
    /// \c _to digraph.
794
    DigraphCopy(To& _to, const From& _from) 
795
      : from(_from), to(_to) {}
661
    DigraphCopy(To& to, const From& from) 
662
      : _from(from), _to(to) {}
796 663

	
797 664
    /// \brief Destructor of the DigraphCopy
798 665
    ///
799 666
    /// Destructor of the DigraphCopy
800 667
    ~DigraphCopy() {
801
      for (int i = 0; i < int(nodeMapCopies.size()); ++i) {
802
        delete nodeMapCopies[i];
668
      for (int i = 0; i < int(_node_maps.size()); ++i) {
669
        delete _node_maps[i];
803 670
      }
804
      for (int i = 0; i < int(arcMapCopies.size()); ++i) {
805
        delete arcMapCopies[i];
671
      for (int i = 0; i < int(_arc_maps.size()); ++i) {
672
        delete _arc_maps[i];
806 673
      }
807 674

	
808 675
    }
809 676

	
810 677
    /// \brief Copies the node references into the given map.
811 678
    ///
812
    /// Copies the node references into the given map.
679
    /// Copies the node references into the given map. The parameter
680
    /// should be a map, which key type is the Node type of the source
681
    /// graph, while the value type is the Node type of the
682
    /// destination graph.
813 683
    template <typename NodeRef>
814 684
    DigraphCopy& nodeRef(NodeRef& map) {
815
      nodeMapCopies.push_back(new _digraph_utils_bits::RefCopy<From, Node, 
816
                              NodeRefMap, NodeRef>(map));
685
      _node_maps.push_back(new _graph_utils_bits::RefCopy<From, Node, 
686
			   NodeRefMap, NodeRef>(map));
817 687
      return *this;
818 688
    }
819 689

	
820 690
    /// \brief Copies the node cross references into the given map.
821 691
    ///
822 692
    ///  Copies the node cross references (reverse references) into
823
    ///  the given map.
693
    ///  the given map. The parameter should be a map, which key type
694
    ///  is the Node type of the destination graph, while the value type is
695
    ///  the Node type of the source graph.
824 696
    template <typename NodeCrossRef>
825 697
    DigraphCopy& nodeCrossRef(NodeCrossRef& map) {
826
      nodeMapCopies.push_back(new _digraph_utils_bits::CrossRefCopy<From, Node,
827
                              NodeRefMap, NodeCrossRef>(map));
698
      _node_maps.push_back(new _graph_utils_bits::CrossRefCopy<From, Node,
699
			   NodeRefMap, NodeCrossRef>(map));
828 700
      return *this;
829 701
    }
830 702

	
831 703
    /// \brief Make copy of the given map.
832 704
    ///
833
    /// Makes copy of the given map for the newly created digraph. 
834
    /// The new map's key type is the to digraph's node type,
835
    /// and the copied map's key type is the from digraph's node
836
    /// type.  
705
    /// Makes copy of the given map for the newly created digraph.
706
    /// The new map's key type is the destination graph's node type,
707
    /// and the copied map's key type is the source graph's node type.
837 708
    template <typename ToMap, typename FromMap>
838 709
    DigraphCopy& nodeMap(ToMap& tmap, const FromMap& map) {
839
      nodeMapCopies.push_back(new _digraph_utils_bits::MapCopy<From, Node, 
840
                              NodeRefMap, ToMap, FromMap>(tmap, map));
710
      _node_maps.push_back(new _graph_utils_bits::MapCopy<From, Node, 
711
			   NodeRefMap, ToMap, FromMap>(tmap, map));
841 712
      return *this;
842 713
    }
843 714

	
... ...
@@ -845,8 +716,8 @@
845 716
    ///
846 717
    /// Make a copy of the given node.
847 718
    DigraphCopy& node(TNode& tnode, const Node& snode) {
848
      nodeMapCopies.push_back(new _digraph_utils_bits::ItemCopy<From, Node, 
849
                              NodeRefMap, TNode>(tnode, snode));
719
      _node_maps.push_back(new _graph_utils_bits::ItemCopy<From, Node, 
720
			   NodeRefMap, TNode>(tnode, snode));
850 721
      return *this;
851 722
    }
852 723

	
... ...
@@ -855,8 +726,8 @@
855 726
    /// Copies the arc references into the given map.
856 727
    template <typename ArcRef>
857 728
    DigraphCopy& arcRef(ArcRef& map) {
858
      arcMapCopies.push_back(new _digraph_utils_bits::RefCopy<From, Arc, 
859
                              ArcRefMap, ArcRef>(map));
729
      _arc_maps.push_back(new _graph_utils_bits::RefCopy<From, Arc, 
730
			  ArcRefMap, ArcRef>(map));
860 731
      return *this;
861 732
    }
862 733

	
... ...
@@ -866,8 +737,8 @@
866 737
    ///  the given map.
867 738
    template <typename ArcCrossRef>
868 739
    DigraphCopy& arcCrossRef(ArcCrossRef& map) {
869
      arcMapCopies.push_back(new _digraph_utils_bits::CrossRefCopy<From, Arc,
870
                              ArcRefMap, ArcCrossRef>(map));
740
      _arc_maps.push_back(new _graph_utils_bits::CrossRefCopy<From, Arc,
741
			  ArcRefMap, ArcCrossRef>(map));
871 742
      return *this;
872 743
    }
873 744

	
... ...
@@ -879,8 +750,8 @@
879 750
    /// type.  
880 751
    template <typename ToMap, typename FromMap>
881 752
    DigraphCopy& arcMap(ToMap& tmap, const FromMap& map) {
882
      arcMapCopies.push_back(new _digraph_utils_bits::MapCopy<From, Arc, 
883
                              ArcRefMap, ToMap, FromMap>(tmap, map));
753
      _arc_maps.push_back(new _graph_utils_bits::MapCopy<From, Arc, 
754
			  ArcRefMap, ToMap, FromMap>(tmap, map));
884 755
      return *this;
885 756
    }
886 757

	
... ...
@@ -888,8 +759,8 @@
888 759
    ///
889 760
    /// Make a copy of the given arc.
890 761
    DigraphCopy& arc(TArc& tarc, const Arc& sarc) {
891
      arcMapCopies.push_back(new _digraph_utils_bits::ItemCopy<From, Arc, 
892
                              ArcRefMap, TArc>(tarc, sarc));
762
      _arc_maps.push_back(new _graph_utils_bits::ItemCopy<From, Arc, 
763
			  ArcRefMap, TArc>(tarc, sarc));
893 764
      return *this;
894 765
    }
895 766

	
... ...
@@ -897,37 +768,37 @@
897 768
    ///
898 769
    /// Executes the copies.
899 770
    void run() {
900
      NodeRefMap nodeRefMap(from);
901
      ArcRefMap arcRefMap(from);
902
      _digraph_utils_bits::DigraphCopySelector<To>::
903
        copy(to, from, nodeRefMap, arcRefMap);
904
      for (int i = 0; i < int(nodeMapCopies.size()); ++i) {
905
        nodeMapCopies[i]->copy(from, nodeRefMap);
771
      NodeRefMap nodeRefMap(_from);
772
      ArcRefMap arcRefMap(_from);
773
      _graph_utils_bits::DigraphCopySelector<To>::
774
        copy(_to, _from, nodeRefMap, arcRefMap);
775
      for (int i = 0; i < int(_node_maps.size()); ++i) {
776
        _node_maps[i]->copy(_from, nodeRefMap);
906 777
      }
907
      for (int i = 0; i < int(arcMapCopies.size()); ++i) {
908
        arcMapCopies[i]->copy(from, arcRefMap);
778
      for (int i = 0; i < int(_arc_maps.size()); ++i) {
779
        _arc_maps[i]->copy(_from, arcRefMap);
909 780
      }      
910 781
    }
911 782

	
912 783
  protected:
913 784

	
914 785

	
915
    const From& from;
916
    To& to;
786
    const From& _from;
787
    To& _to;
917 788

	
918
    std::vector<_digraph_utils_bits::MapCopyBase<From, Node, NodeRefMap>* > 
919
    nodeMapCopies;
789
    std::vector<_graph_utils_bits::MapCopyBase<From, Node, NodeRefMap>* > 
790
    _node_maps;
920 791

	
921
    std::vector<_digraph_utils_bits::MapCopyBase<From, Arc, ArcRefMap>* > 
922
    arcMapCopies;
792
    std::vector<_graph_utils_bits::MapCopyBase<From, Arc, ArcRefMap>* > 
793
    _arc_maps;
923 794

	
924 795
  };
925 796

	
926 797
  /// \brief Copy a digraph to another digraph.
927 798
  ///
928
  /// Copy a digraph to another digraph.
929
  /// The usage of the function:
930
  /// 
799
  /// Copy a digraph to another digraph. The complete usage of the
800
  /// function is detailed in the DigraphCopy class, but a short
801
  /// example shows a basic work:
931 802
  ///\code
932 803
  /// copyDigraph(trg, src).nodeRef(nr).arcCrossRef(ecr).run();
933 804
  ///\endcode
... ...
@@ -943,10 +814,41 @@
943 814
    return DigraphCopy<To, From>(to, from);
944 815
  }
945 816

	
946
  /// \brief Class to copy an graph.
817
  /// \brief Class to copy a graph.
947 818
  ///
948
  /// Class to copy an graph to another digraph (duplicate a digraph).
949
  /// The simplest way of using it is through the \c copyGraph() function.
819
  /// Class to copy a graph to another graph (duplicate a graph). The
820
  /// simplest way of using it is through the \c copyGraph() function.
821
  ///
822
  /// This class not just make a copy of a graph, but it can create
823
  /// references and cross references between the nodes, edges and arcs of
824
  /// the two graphs, it can copy maps for use with the newly created
825
  /// graph and copy nodes, edges and arcs.
826
  ///
827
  /// To make a copy from a graph, first an instance of GraphCopy
828
  /// should be created, then the data belongs to the graph should
829
  /// assigned to copy. In the end, the \c run() member should be
830
  /// called.
831
  ///
832
  /// The next code copies a graph with several data:
833
  ///\code
834
  ///  GraphCopy<NewGraph, OrigGraph> dc(new_graph, orig_graph);
835
  ///  // create a reference for the nodes
836
  ///  OrigGraph::NodeMap<NewGraph::Node> nr(orig_graph);
837
  ///  dc.nodeRef(nr);
838
  ///  // create a cross reference (inverse) for the edges
839
  ///  NewGraph::EdgeMap<OrigGraph::Arc> ecr(new_graph);
840
  ///  dc.edgeCrossRef(ecr);
841
  ///  // copy an arc map
842
  ///  OrigGraph::ArcMap<double> oamap(orig_graph);
843
  ///  NewGraph::ArcMap<double> namap(new_graph);
844
  ///  dc.arcMap(namap, oamap);
845
  ///  // copy a node
846
  ///  OrigGraph::Node on;
847
  ///  NewGraph::Node nn;
848
  ///  dc.node(nn, on);
849
  ///  // Executions of copy
850
  ///  dc.run();
851
  ///\endcode
950 852
  template <typename To, typename From>
951 853
  class GraphCopy {
952 854
  private:
... ...
@@ -966,51 +868,50 @@
966 868
    typedef typename From::template EdgeMap<TEdge> EdgeRefMap;
967 869

	
968 870
    struct ArcRefMap {
969
      ArcRefMap(const To& _to, const From& _from,
970
                 const EdgeRefMap& _edge_ref, const NodeRefMap& _node_ref) 
971
        : to(_to), from(_from), 
972
          edge_ref(_edge_ref), node_ref(_node_ref) {}
871
      ArcRefMap(const To& to, const From& from,
872
		const EdgeRefMap& edge_ref, const NodeRefMap& node_ref) 
873
        : _to(to), _from(from), 
874
          _edge_ref(edge_ref), _node_ref(node_ref) {}
973 875

	
974 876
      typedef typename From::Arc Key;
975 877
      typedef typename To::Arc Value;
976 878

	
977 879
      Value operator[](const Key& key) const {
978 880
        bool forward = 
979
          (from.direction(key) == 
980
           (node_ref[from.source(static_cast<const Edge&>(key))] == 
981
            to.source(edge_ref[static_cast<const Edge&>(key)])));
982
	return to.direct(edge_ref[key], forward); 
881
          (_from.direction(key) == 
882
	   (_node_ref[_from.source(key)] == _to.source(_edge_ref[key])));
883
	return _to.direct(_edge_ref[key], forward); 
983 884
      }
984 885
      
985
      const To& to;
986
      const From& from;
987
      const EdgeRefMap& edge_ref;
988
      const NodeRefMap& node_ref;
886
      const To& _to;
887
      const From& _from;
888
      const EdgeRefMap& _edge_ref;
889
      const NodeRefMap& _node_ref;
989 890
    };
990 891

	
991 892
    
992 893
  public: 
993 894

	
994 895

	
995
    /// \brief Constructor for the DigraphCopy.
896
    /// \brief Constructor for the GraphCopy.
996 897
    ///
997
    /// It copies the content of the \c _from digraph into the
998
    /// \c _to digraph.
999
    GraphCopy(To& _to, const From& _from) 
1000
      : from(_from), to(_to) {}
898
    /// It copies the content of the \c _from graph into the
899
    /// \c _to graph.
900
    GraphCopy(To& to, const From& from) 
901
      : _from(from), _to(to) {}
1001 902

	
1002
    /// \brief Destructor of the DigraphCopy
903
    /// \brief Destructor of the GraphCopy
1003 904
    ///
1004
    /// Destructor of the DigraphCopy
905
    /// Destructor of the GraphCopy
1005 906
    ~GraphCopy() {
1006
      for (int i = 0; i < int(nodeMapCopies.size()); ++i) {
1007
        delete nodeMapCopies[i];
907
      for (int i = 0; i < int(_node_maps.size()); ++i) {
908
        delete _node_maps[i];
1008 909
      }
1009
      for (int i = 0; i < int(arcMapCopies.size()); ++i) {
1010
        delete arcMapCopies[i];
910
      for (int i = 0; i < int(_arc_maps.size()); ++i) {
911
        delete _arc_maps[i];
1011 912
      }
1012
      for (int i = 0; i < int(edgeMapCopies.size()); ++i) {
1013
        delete edgeMapCopies[i];
913
      for (int i = 0; i < int(_edge_maps.size()); ++i) {
914
        delete _edge_maps[i];
1014 915
      }
1015 916

	
1016 917
    }
... ...
@@ -1020,8 +921,8 @@
1020 921
    /// Copies the node references into the given map.
1021 922
    template <typename NodeRef>
1022 923
    GraphCopy& nodeRef(NodeRef& map) {
1023
      nodeMapCopies.push_back(new _digraph_utils_bits::RefCopy<From, Node, 
1024
                              NodeRefMap, NodeRef>(map));
924
      _node_maps.push_back(new _graph_utils_bits::RefCopy<From, Node, 
925
			   NodeRefMap, NodeRef>(map));
1025 926
      return *this;
1026 927
    }
1027 928

	
... ...
@@ -1031,21 +932,21 @@
1031 932
    ///  the given map.
1032 933
    template <typename NodeCrossRef>
1033 934
    GraphCopy& nodeCrossRef(NodeCrossRef& map) {
1034
      nodeMapCopies.push_back(new _digraph_utils_bits::CrossRefCopy<From, Node,
1035
                              NodeRefMap, NodeCrossRef>(map));
935
      _node_maps.push_back(new _graph_utils_bits::CrossRefCopy<From, Node,
936
			   NodeRefMap, NodeCrossRef>(map));
1036 937
      return *this;
1037 938
    }
1038 939

	
1039 940
    /// \brief Make copy of the given map.
1040 941
    ///
1041
    /// Makes copy of the given map for the newly created digraph. 
1042
    /// The new map's key type is the to digraph's node type,
1043
    /// and the copied map's key type is the from digraph's node
942
    /// Makes copy of the given map for the newly created graph. 
943
    /// The new map's key type is the to graph's node type,
944
    /// and the copied map's key type is the from graph's node
1044 945
    /// type.  
1045 946
    template <typename ToMap, typename FromMap>
1046 947
    GraphCopy& nodeMap(ToMap& tmap, const FromMap& map) {
1047
      nodeMapCopies.push_back(new _digraph_utils_bits::MapCopy<From, Node, 
1048
                              NodeRefMap, ToMap, FromMap>(tmap, map));
948
      _node_maps.push_back(new _graph_utils_bits::MapCopy<From, Node, 
949
			   NodeRefMap, ToMap, FromMap>(tmap, map));
1049 950
      return *this;
1050 951
    }
1051 952

	
... ...
@@ -1053,8 +954,8 @@
1053 954
    ///
1054 955
    /// Make a copy of the given node.
1055 956
    GraphCopy& node(TNode& tnode, const Node& snode) {
1056
      nodeMapCopies.push_back(new _digraph_utils_bits::ItemCopy<From, Node, 
1057
                              NodeRefMap, TNode>(tnode, snode));
957
      _node_maps.push_back(new _graph_utils_bits::ItemCopy<From, Node, 
958
			   NodeRefMap, TNode>(tnode, snode));
1058 959
      return *this;
1059 960
    }
1060 961

	
... ...
@@ -1063,8 +964,8 @@
1063 964
    /// Copies the arc references into the given map.
1064 965
    template <typename ArcRef>
1065 966
    GraphCopy& arcRef(ArcRef& map) {
1066
      arcMapCopies.push_back(new _digraph_utils_bits::RefCopy<From, Arc, 
1067
                              ArcRefMap, ArcRef>(map));
967
      _arc_maps.push_back(new _graph_utils_bits::RefCopy<From, Arc, 
968
			  ArcRefMap, ArcRef>(map));
1068 969
      return *this;
1069 970
    }
1070 971

	
... ...
@@ -1074,21 +975,21 @@
1074 975
    ///  the given map.
1075 976
    template <typename ArcCrossRef>
1076 977
    GraphCopy& arcCrossRef(ArcCrossRef& map) {
1077
      arcMapCopies.push_back(new _digraph_utils_bits::CrossRefCopy<From, Arc,
1078
                              ArcRefMap, ArcCrossRef>(map));
978
      _arc_maps.push_back(new _graph_utils_bits::CrossRefCopy<From, Arc,
979
			  ArcRefMap, ArcCrossRef>(map));
1079 980
      return *this;
1080 981
    }
1081 982

	
1082 983
    /// \brief Make copy of the given map.
1083 984
    ///
1084
    /// Makes copy of the given map for the newly created digraph. 
1085
    /// The new map's key type is the to digraph's arc type,
1086
    /// and the copied map's key type is the from digraph's arc
985
    /// Makes copy of the given map for the newly created graph. 
986
    /// The new map's key type is the to graph's arc type,
987
    /// and the copied map's key type is the from graph's arc
1087 988
    /// type.  
1088 989
    template <typename ToMap, typename FromMap>
1089 990
    GraphCopy& arcMap(ToMap& tmap, const FromMap& map) {
1090
      arcMapCopies.push_back(new _digraph_utils_bits::MapCopy<From, Arc, 
1091
                              ArcRefMap, ToMap, FromMap>(tmap, map));
991
      _arc_maps.push_back(new _graph_utils_bits::MapCopy<From, Arc, 
992
			  ArcRefMap, ToMap, FromMap>(tmap, map));
1092 993
      return *this;
1093 994
    }
1094 995

	
... ...
@@ -1096,8 +997,8 @@
1096 997
    ///
1097 998
    /// Make a copy of the given arc.
1098 999
    GraphCopy& arc(TArc& tarc, const Arc& sarc) {
1099
      arcMapCopies.push_back(new _digraph_utils_bits::ItemCopy<From, Arc, 
1100
                              ArcRefMap, TArc>(tarc, sarc));
1000
      _arc_maps.push_back(new _graph_utils_bits::ItemCopy<From, Arc, 
1001
			  ArcRefMap, TArc>(tarc, sarc));
1101 1002
      return *this;
1102 1003
    }
1103 1004

	
... ...
@@ -1106,8 +1007,8 @@
1106 1007
    /// Copies the edge references into the given map.
1107 1008
    template <typename EdgeRef>
1108 1009
    GraphCopy& edgeRef(EdgeRef& map) {
1109
      edgeMapCopies.push_back(new _digraph_utils_bits::RefCopy<From, Edge, 
1110
                               EdgeRefMap, EdgeRef>(map));
1010
      _edge_maps.push_back(new _graph_utils_bits::RefCopy<From, Edge, 
1011
			   EdgeRefMap, EdgeRef>(map));
1111 1012
      return *this;
1112 1013
    }
1113 1014

	
... ...
@@ -1117,21 +1018,21 @@
1117 1018
    /// references) into the given map.
1118 1019
    template <typename EdgeCrossRef>
1119 1020
    GraphCopy& edgeCrossRef(EdgeCrossRef& map) {
1120
      edgeMapCopies.push_back(new _digraph_utils_bits::CrossRefCopy<From, 
1121
                               Edge, EdgeRefMap, EdgeCrossRef>(map));
1021
      _edge_maps.push_back(new _graph_utils_bits::CrossRefCopy<From, 
1022
			   Edge, EdgeRefMap, EdgeCrossRef>(map));
1122 1023
      return *this;
1123 1024
    }
1124 1025

	
1125 1026
    /// \brief Make copy of the given map.
1126 1027
    ///
1127
    /// Makes copy of the given map for the newly created digraph. 
1128
    /// The new map's key type is the to digraph's edge type,
1129
    /// and the copied map's key type is the from digraph's edge
1028
    /// Makes copy of the given map for the newly created graph. 
1029
    /// The new map's key type is the to graph's edge type,
1030
    /// and the copied map's key type is the from graph's edge
1130 1031
    /// type.  
1131 1032
    template <typename ToMap, typename FromMap>
1132 1033
    GraphCopy& edgeMap(ToMap& tmap, const FromMap& map) {
1133
      edgeMapCopies.push_back(new _digraph_utils_bits::MapCopy<From, Edge, 
1134
                               EdgeRefMap, ToMap, FromMap>(tmap, map));
1034
      _edge_maps.push_back(new _graph_utils_bits::MapCopy<From, Edge, 
1035
			   EdgeRefMap, ToMap, FromMap>(tmap, map));
1135 1036
      return *this;
1136 1037
    }
1137 1038

	
... ...
@@ -1139,8 +1040,8 @@
1139 1040
    ///
1140 1041
    /// Make a copy of the given edge.
1141 1042
    GraphCopy& edge(TEdge& tedge, const Edge& sedge) {
1142
      edgeMapCopies.push_back(new _digraph_utils_bits::ItemCopy<From, Edge, 
1143
                               EdgeRefMap, TEdge>(tedge, sedge));
1043
      _edge_maps.push_back(new _graph_utils_bits::ItemCopy<From, Edge, 
1044
			   EdgeRefMap, TEdge>(tedge, sedge));
1144 1045
      return *this;
1145 1046
    }
1146 1047

	
... ...
@@ -1148,51 +1049,51 @@
1148 1049
    ///
1149 1050
    /// Executes the copies.
1150 1051
    void run() {
1151
      NodeRefMap nodeRefMap(from);
1152
      EdgeRefMap edgeRefMap(from);
1153
      ArcRefMap arcRefMap(to, from, edgeRefMap, nodeRefMap);
1154
      _digraph_utils_bits::GraphCopySelector<To>::
1155
        copy(to, from, nodeRefMap, edgeRefMap);
1156
      for (int i = 0; i < int(nodeMapCopies.size()); ++i) {
1157
        nodeMapCopies[i]->copy(from, nodeRefMap);
1052
      NodeRefMap nodeRefMap(_from);
1053
      EdgeRefMap edgeRefMap(_from);
1054
      ArcRefMap arcRefMap(_to, _from, edgeRefMap, nodeRefMap);
1055
      _graph_utils_bits::GraphCopySelector<To>::
1056
        copy(_to, _from, nodeRefMap, edgeRefMap);
1057
      for (int i = 0; i < int(_node_maps.size()); ++i) {
1058
        _node_maps[i]->copy(_from, nodeRefMap);
1158 1059
      }
1159
      for (int i = 0; i < int(edgeMapCopies.size()); ++i) {
1160
        edgeMapCopies[i]->copy(from, edgeRefMap);
1060
      for (int i = 0; i < int(_edge_maps.size()); ++i) {
1061
        _edge_maps[i]->copy(_from, edgeRefMap);
1161 1062
      }
1162
      for (int i = 0; i < int(arcMapCopies.size()); ++i) {
1163
        arcMapCopies[i]->copy(from, arcRefMap);
1063
      for (int i = 0; i < int(_arc_maps.size()); ++i) {
1064
        _arc_maps[i]->copy(_from, arcRefMap);
1164 1065
      }
1165 1066
    }
1166 1067

	
1167 1068
  private:
1168 1069
    
1169
    const From& from;
1170
    To& to;
1070
    const From& _from;
1071
    To& _to;
1171 1072

	
1172
    std::vector<_digraph_utils_bits::MapCopyBase<From, Node, NodeRefMap>* > 
1173
    nodeMapCopies;
1073
    std::vector<_graph_utils_bits::MapCopyBase<From, Node, NodeRefMap>* > 
1074
    _node_maps;
1174 1075

	
1175
    std::vector<_digraph_utils_bits::MapCopyBase<From, Arc, ArcRefMap>* > 
1176
    arcMapCopies;
1076
    std::vector<_graph_utils_bits::MapCopyBase<From, Arc, ArcRefMap>* > 
1077
    _arc_maps;
1177 1078

	
1178
    std::vector<_digraph_utils_bits::MapCopyBase<From, Edge, EdgeRefMap>* > 
1179
    edgeMapCopies;
1079
    std::vector<_graph_utils_bits::MapCopyBase<From, Edge, EdgeRefMap>* > 
1080
    _edge_maps;
1180 1081

	
1181 1082
  };
1182 1083

	
1183
  /// \brief Copy an graph to another digraph.
1084
  /// \brief Copy a graph to another graph.
1184 1085
  ///
1185
  /// Copy an graph to another digraph.
1186
  /// The usage of the function:
1187
  /// 
1086
  /// Copy a graph to another graph. The complete usage of the
1087
  /// function is detailed in the GraphCopy class, but a short
1088
  /// example shows a basic work:
1188 1089
  ///\code
1189 1090
  /// copyGraph(trg, src).nodeRef(nr).arcCrossRef(ecr).run();
1190 1091
  ///\endcode
1191 1092
  /// 
1192 1093
  /// After the copy the \c nr map will contain the mapping from the
1193
  /// nodes of the \c from digraph to the nodes of the \c to digraph and
1194
  /// \c ecr will contain the mapping from the arcs of the \c to digraph
1195
  /// to the arcs of the \c from digraph.
1094
  /// nodes of the \c from graph to the nodes of the \c to graph and
1095
  /// \c ecr will contain the mapping from the arcs of the \c to graph
1096
  /// to the arcs of the \c from graph.
1196 1097
  ///
1197 1098
  /// \see GraphCopy 
1198 1099
  template <typename To, typename From>
... ...
@@ -1201,391 +1102,25 @@
1201 1102
    return GraphCopy<To, From>(to, from);
1202 1103
  }
1203 1104

	
1204
  /// \brief Class to copy a bipartite digraph.
1205
  ///
1206
  /// Class to copy a bipartite digraph to another digraph
1207
  /// (duplicate a digraph).  The simplest way of using it is through
1208
  /// the \c copyBpGraph() function.
1209
  template <typename To, typename From>
1210
  class BpGraphCopy {
1211
  private:
1212

	
1213
    typedef typename From::Node Node;
1214
    typedef typename From::Red Red;
1215
    typedef typename From::Blue Blue;
1216
    typedef typename From::NodeIt NodeIt;
1217
    typedef typename From::Arc Arc;
1218
    typedef typename From::ArcIt ArcIt;
1219
    typedef typename From::Edge Edge;
1220
    typedef typename From::EdgeIt EdgeIt;
1221

	
1222
    typedef typename To::Node TNode;
1223
    typedef typename To::Arc TArc;
1224
    typedef typename To::Edge TEdge;
1225

	
1226
    typedef typename From::template RedMap<TNode> RedRefMap;
1227
    typedef typename From::template BlueMap<TNode> BlueRefMap;
1228
    typedef typename From::template EdgeMap<TEdge> EdgeRefMap;
1229

	
1230
    struct NodeRefMap {
1231
      NodeRefMap(const From& _from, const RedRefMap& _red_ref,
1232
                 const BlueRefMap& _blue_ref)
1233
        : from(_from), red_ref(_red_ref), blue_ref(_blue_ref) {}
1234

	
1235
      typedef typename From::Node Key;
1236
      typedef typename To::Node Value;
1237

	
1238
      Value operator[](const Key& key) const {
1239
	return from.red(key) ? red_ref[key] : blue_ref[key]; 
1240
      }
1241
      
1242
      const From& from;
1243
      const RedRefMap& red_ref;
1244
      const BlueRefMap& blue_ref;
1245
    };
1246

	
1247
    struct ArcRefMap {
1248
      ArcRefMap(const To& _to, const From& _from,
1249
                 const EdgeRefMap& _edge_ref, const NodeRefMap& _node_ref) 
1250
        : to(_to), from(_from), 
1251
          edge_ref(_edge_ref), node_ref(_node_ref) {}
1252

	
1253
      typedef typename From::Arc Key;
1254
      typedef typename To::Arc Value;
1255

	
1256
      Value operator[](const Key& key) const {
1257
        bool forward = 
1258
          (from.direction(key) == 
1259
           (node_ref[from.source(static_cast<const Edge&>(key))] == 
1260
            to.source(edge_ref[static_cast<const Edge&>(key)])));
1261
	return to.direct(edge_ref[key], forward); 
1262
      }
1263
      
1264
      const To& to;
1265
      const From& from;
1266
      const EdgeRefMap& edge_ref;
1267
      const NodeRefMap& node_ref;
1268
    };
1269
    
1270
  public: 
1271

	
1272

	
1273
    /// \brief Constructor for the DigraphCopy.
1274
    ///
1275
    /// It copies the content of the \c _from digraph into the
1276
    /// \c _to digraph.
1277
    BpGraphCopy(To& _to, const From& _from) 
1278
      : from(_from), to(_to) {}
1279

	
1280
    /// \brief Destructor of the DigraphCopy
1281
    ///
1282
    /// Destructor of the DigraphCopy
1283
    ~BpGraphCopy() {
1284
      for (int i = 0; i < int(redMapCopies.size()); ++i) {
1285
        delete redMapCopies[i];
1286
      }
1287
      for (int i = 0; i < int(blueMapCopies.size()); ++i) {
1288
        delete blueMapCopies[i];
1289
      }
1290
      for (int i = 0; i < int(nodeMapCopies.size()); ++i) {
1291
        delete nodeMapCopies[i];
1292
      }
1293
      for (int i = 0; i < int(arcMapCopies.size()); ++i) {
1294
        delete arcMapCopies[i];
1295
      }
1296
      for (int i = 0; i < int(edgeMapCopies.size()); ++i) {
1297
        delete edgeMapCopies[i];
1298
      }
1299

	
1300
    }
1301

	
1302
    /// \brief Copies the A-node references into the given map.
1303
    ///
1304
    /// Copies the A-node references into the given map.
1305
    template <typename RedRef>
1306
    BpGraphCopy& redRef(RedRef& map) {
1307
      redMapCopies.push_back(new _digraph_utils_bits::RefCopy<From, Red, 
1308
                               RedRefMap, RedRef>(map));
1309
      return *this;
1310
    }
1311

	
1312
    /// \brief Copies the A-node cross references into the given map.
1313
    ///
1314
    /// Copies the A-node cross references (reverse references) into
1315
    /// the given map.
1316
    template <typename RedCrossRef>
1317
    BpGraphCopy& redCrossRef(RedCrossRef& map) {
1318
      redMapCopies.push_back(new _digraph_utils_bits::CrossRefCopy<From, 
1319
                               Red, RedRefMap, RedCrossRef>(map));
1320
      return *this;
1321
    }
1322

	
1323
    /// \brief Make copy of the given A-node map.
1324
    ///
1325
    /// Makes copy of the given map for the newly created digraph. 
1326
    /// The new map's key type is the to digraph's node type,
1327
    /// and the copied map's key type is the from digraph's node
1328
    /// type.  
1329
    template <typename ToMap, typename FromMap>
1330
    BpGraphCopy& redMap(ToMap& tmap, const FromMap& map) {
1331
      redMapCopies.push_back(new _digraph_utils_bits::MapCopy<From, Red, 
1332
                               RedRefMap, ToMap, FromMap>(tmap, map));
1333
      return *this;
1334
    }
1335

	
1336
    /// \brief Copies the B-node references into the given map.
1337
    ///
1338
    /// Copies the B-node references into the given map.
1339
    template <typename BlueRef>
1340
    BpGraphCopy& blueRef(BlueRef& map) {
1341
      blueMapCopies.push_back(new _digraph_utils_bits::RefCopy<From, Blue, 
1342
                               BlueRefMap, BlueRef>(map));
1343
      return *this;
1344
    }
1345

	
1346
    /// \brief Copies the B-node cross references into the given map.
1347
    ///
1348
    ///  Copies the B-node cross references (reverse references) into
1349
    ///  the given map.
1350
    template <typename BlueCrossRef>
1351
    BpGraphCopy& blueCrossRef(BlueCrossRef& map) {
1352
      blueMapCopies.push_back(new _digraph_utils_bits::CrossRefCopy<From, 
1353
                              Blue, BlueRefMap, BlueCrossRef>(map));
1354
      return *this;
1355
    }
1356

	
1357
    /// \brief Make copy of the given B-node map.
1358
    ///
1359
    /// Makes copy of the given map for the newly created digraph. 
1360
    /// The new map's key type is the to digraph's node type,
1361
    /// and the copied map's key type is the from digraph's node
1362
    /// type.  
1363
    template <typename ToMap, typename FromMap>
1364
    BpGraphCopy& blueMap(ToMap& tmap, const FromMap& map) {
1365
      blueMapCopies.push_back(new _digraph_utils_bits::MapCopy<From, Blue, 
1366
                               BlueRefMap, ToMap, FromMap>(tmap, map));
1367
      return *this;
1368
    }
1369
    /// \brief Copies the node references into the given map.
1370
    ///
1371
    /// Copies the node references into the given map.
1372
    template <typename NodeRef>
1373
    BpGraphCopy& nodeRef(NodeRef& map) {
1374
      nodeMapCopies.push_back(new _digraph_utils_bits::RefCopy<From, Node, 
1375
                              NodeRefMap, NodeRef>(map));
1376
      return *this;
1377
    }
1378

	
1379
    /// \brief Copies the node cross references into the given map.
1380
    ///
1381
    ///  Copies the node cross references (reverse references) into
1382
    ///  the given map.
1383
    template <typename NodeCrossRef>
1384
    BpGraphCopy& nodeCrossRef(NodeCrossRef& map) {
1385
      nodeMapCopies.push_back(new _digraph_utils_bits::CrossRefCopy<From, Node,
1386
                              NodeRefMap, NodeCrossRef>(map));
1387
      return *this;
1388
    }
1389

	
1390
    /// \brief Make copy of the given map.
1391
    ///
1392
    /// Makes copy of the given map for the newly created digraph. 
1393
    /// The new map's key type is the to digraph's node type,
1394
    /// and the copied map's key type is the from digraph's node
1395
    /// type.  
1396
    template <typename ToMap, typename FromMap>
1397
    BpGraphCopy& nodeMap(ToMap& tmap, const FromMap& map) {
1398
      nodeMapCopies.push_back(new _digraph_utils_bits::MapCopy<From, Node, 
1399
                              NodeRefMap, ToMap, FromMap>(tmap, map));
1400
      return *this;
1401
    }
1402

	
1403
    /// \brief Make a copy of the given node.
1404
    ///
1405
    /// Make a copy of the given node.
1406
    BpGraphCopy& node(TNode& tnode, const Node& snode) {
1407
      nodeMapCopies.push_back(new _digraph_utils_bits::ItemCopy<From, Node, 
1408
                              NodeRefMap, TNode>(tnode, snode));
1409
      return *this;
1410
    }
1411

	
1412
    /// \brief Copies the arc references into the given map.
1413
    ///
1414
    /// Copies the arc references into the given map.
1415
    template <typename ArcRef>
1416
    BpGraphCopy& arcRef(ArcRef& map) {
1417
      arcMapCopies.push_back(new _digraph_utils_bits::RefCopy<From, Arc, 
1418
                              ArcRefMap, ArcRef>(map));
1419
      return *this;
1420
    }
1421

	
1422
    /// \brief Copies the arc cross references into the given map.
1423
    ///
1424
    ///  Copies the arc cross references (reverse references) into
1425
    ///  the given map.
1426
    template <typename ArcCrossRef>
1427
    BpGraphCopy& arcCrossRef(ArcCrossRef& map) {
1428
      arcMapCopies.push_back(new _digraph_utils_bits::CrossRefCopy<From, Arc,
1429
                              ArcRefMap, ArcCrossRef>(map));
1430
      return *this;
1431
    }
1432

	
1433
    /// \brief Make copy of the given map.
1434
    ///
1435
    /// Makes copy of the given map for the newly created digraph. 
1436
    /// The new map's key type is the to digraph's arc type,
1437
    /// and the copied map's key type is the from digraph's arc
1438
    /// type.  
1439
    template <typename ToMap, typename FromMap>
1440
    BpGraphCopy& arcMap(ToMap& tmap, const FromMap& map) {
1441
      arcMapCopies.push_back(new _digraph_utils_bits::MapCopy<From, Arc, 
1442
                              ArcRefMap, ToMap, FromMap>(tmap, map));
1443
      return *this;
1444
    }
1445

	
1446
    /// \brief Make a copy of the given arc.
1447
    ///
1448
    /// Make a copy of the given arc.
1449
    BpGraphCopy& arc(TArc& tarc, const Arc& sarc) {
1450
      arcMapCopies.push_back(new _digraph_utils_bits::ItemCopy<From, Arc, 
1451
                              ArcRefMap, TArc>(tarc, sarc));
1452
      return *this;
1453
    }
1454

	
1455
    /// \brief Copies the edge references into the given map.
1456
    ///
1457
    /// Copies the edge references into the given map.
1458
    template <typename EdgeRef>
1459
    BpGraphCopy& edgeRef(EdgeRef& map) {
1460
      edgeMapCopies.push_back(new _digraph_utils_bits::RefCopy<From, Edge, 
1461
                               EdgeRefMap, EdgeRef>(map));
1462
      return *this;
1463
    }
1464

	
1465
    /// \brief Copies the edge cross references into the given map.
1466
    ///
1467
    /// Copies the edge cross references (reverse
1468
    /// references) into the given map.
1469
    template <typename EdgeCrossRef>
1470
    BpGraphCopy& edgeCrossRef(EdgeCrossRef& map) {
1471
      edgeMapCopies.push_back(new _digraph_utils_bits::CrossRefCopy<From, 
1472
                               Edge, EdgeRefMap, EdgeCrossRef>(map));
1473
      return *this;
1474
    }
1475

	
1476
    /// \brief Make copy of the given map.
1477
    ///
1478
    /// Makes copy of the given map for the newly created digraph. 
1479
    /// The new map's key type is the to digraph's edge type,
1480
    /// and the copied map's key type is the from digraph's edge
1481
    /// type.  
1482
    template <typename ToMap, typename FromMap>
1483
    BpGraphCopy& edgeMap(ToMap& tmap, const FromMap& map) {
1484
      edgeMapCopies.push_back(new _digraph_utils_bits::MapCopy<From, Edge, 
1485
                               EdgeRefMap, ToMap, FromMap>(tmap, map));
1486
      return *this;
1487
    }
1488

	
1489
    /// \brief Make a copy of the given edge.
1490
    ///
1491
    /// Make a copy of the given edge.
1492
    BpGraphCopy& edge(TEdge& tedge, const Edge& sedge) {
1493
      edgeMapCopies.push_back(new _digraph_utils_bits::ItemCopy<From, Edge, 
1494
                               EdgeRefMap, TEdge>(tedge, sedge));
1495
      return *this;
1496
    }
1497

	
1498
    /// \brief Executes the copies.
1499
    ///
1500
    /// Executes the copies.
1501
    void run() {
1502
      RedRefMap redRefMap(from);
1503
      BlueRefMap blueRefMap(from);
1504
      NodeRefMap nodeRefMap(from, redRefMap, blueRefMap);
1505
      EdgeRefMap edgeRefMap(from);
1506
      ArcRefMap arcRefMap(to, from, edgeRefMap, nodeRefMap);
1507
      _digraph_utils_bits::BpGraphCopySelector<To>::
1508
        copy(to, from, redRefMap, blueRefMap, edgeRefMap);
1509
      for (int i = 0; i < int(redMapCopies.size()); ++i) {
1510
        redMapCopies[i]->copy(from, redRefMap);
1511
      }
1512
      for (int i = 0; i < int(blueMapCopies.size()); ++i) {
1513
        blueMapCopies[i]->copy(from, blueRefMap);
1514
      }
1515
      for (int i = 0; i < int(nodeMapCopies.size()); ++i) {
1516
        nodeMapCopies[i]->copy(from, nodeRefMap);
1517
      }
1518
      for (int i = 0; i < int(edgeMapCopies.size()); ++i) {
1519
        edgeMapCopies[i]->copy(from, edgeRefMap);
1520
      }
1521
      for (int i = 0; i < int(arcMapCopies.size()); ++i) {
1522
        arcMapCopies[i]->copy(from, arcRefMap);
1523
      }
1524
    }
1525

	
1526
  private:
1527
    
1528
    const From& from;
1529
    To& to;
1530

	
1531
    std::vector<_digraph_utils_bits::MapCopyBase<From, Red, RedRefMap>* > 
1532
    redMapCopies;
1533

	
1534
    std::vector<_digraph_utils_bits::MapCopyBase<From, Blue, BlueRefMap>* > 
1535
    blueMapCopies;
1536

	
1537
    std::vector<_digraph_utils_bits::MapCopyBase<From, Node, NodeRefMap>* > 
1538
    nodeMapCopies;
1539

	
1540
    std::vector<_digraph_utils_bits::MapCopyBase<From, Arc, ArcRefMap>* > 
1541
    arcMapCopies;
1542

	
1543
    std::vector<_digraph_utils_bits::MapCopyBase<From, Edge, EdgeRefMap>* > 
1544
    edgeMapCopies;
1545

	
1546
  };
1547

	
1548
  /// \brief Copy a bipartite digraph to another digraph.
1549
  ///
1550
  /// Copy a bipartite digraph to another digraph.
1551
  /// The usage of the function:
1552
  /// 
1553
  ///\code
1554
  /// copyBpGraph(trg, src).redRef(anr).arcCrossRef(ecr).run();
1555
  ///\endcode
1556
  /// 
1557
  /// After the copy the \c nr map will contain the mapping from the
1558
  /// nodes of the \c from digraph to the nodes of the \c to digraph and
1559
  /// \c ecr will contain the mapping from the arcs of the \c to digraph
1560
  /// to the arcs of the \c from digraph.
1561
  ///
1562
  /// \see BpGraphCopy
1563
  template <typename To, typename From>
1564
  BpGraphCopy<To, From> 
1565
  copyBpGraph(To& to, const From& from) {
1566
    return BpGraphCopy<To, From>(to, from);
1567
  }
1568

	
1569

	
1570 1105
  /// @}
1571 1106

	
1572
  /// \addtogroup digraph_maps
1107
  /// \addtogroup graph_maps
1573 1108
  /// @{
1574 1109

	
1575
  /// Provides an immutable and unique id for each item in the digraph.
1110
  /// Provides an immutable and unique id for each item in the graph.
1576 1111

	
1577 1112
  /// The IdMap class provides a unique and immutable id for each item of the
1578
  /// same type (e.g. node) in the digraph. This id is <ul><li>\b unique:
1113
  /// same type (e.g. node) in the graph. This id is <ul><li>\b unique:
1579 1114
  /// different items (nodes) get different ids <li>\b immutable: the id of an
1580 1115
  /// item (node) does not change (even if you delete other nodes).  </ul>
1581 1116
  /// Through this map you get access (i.e. can read) the inner id values of
1582
  /// the items stored in the digraph. This map can be inverted with its member
1583
  /// class \c InverseMap.
1117
  /// the items stored in the graph. This map can be inverted with its member
1118
  /// class \c InverseMap or with the \c operator() member.
1584 1119
  ///
1585
  template <typename _Digraph, typename _Item>
1120
  template <typename _Graph, typename _Item>
1586 1121
  class IdMap {
1587 1122
  public:
1588
    typedef _Digraph Digraph;
1123
    typedef _Graph Graph;
1589 1124
    typedef int Value;
1590 1125
    typedef _Item Item;
1591 1126
    typedef _Item Key;
... ...
@@ -1593,20 +1128,20 @@
1593 1128
    /// \brief Constructor.
1594 1129
    ///
1595 1130
    /// Constructor of the map.
1596
    explicit IdMap(const Digraph& _digraph) : digraph(&_digraph) {}
1131
    explicit IdMap(const Graph& graph) : _graph(&graph) {}
1597 1132

	
1598 1133
    /// \brief Gives back the \e id of the item.
1599 1134
    ///
1600 1135
    /// Gives back the immutable and unique \e id of the item.
1601
    int operator[](const Item& item) const { return digraph->id(item);}
1136
    int operator[](const Item& item) const { return _graph->id(item);}
1602 1137

	
1603 1138
    /// \brief Gives back the item by its id.
1604 1139
    ///
1605 1140
    /// Gives back the item by its id.
1606
    Item operator()(int id) { return digraph->fromId(id, Item()); }
1141
    Item operator()(int id) { return _graph->fromId(id, Item()); }
1607 1142

	
1608 1143
  private:
1609
    const Digraph* digraph;
1144
    const Graph* _graph;
1610 1145

	
1611 1146
  public:
1612 1147

	
... ...
@@ -1620,34 +1155,34 @@
1620 1155
      /// \brief Constructor.
1621 1156
      ///
1622 1157
      /// Constructor for creating an id-to-item map.
1623
      explicit InverseMap(const Digraph& _digraph) : digraph(&_digraph) {}
1158
      explicit InverseMap(const Graph& graph) : _graph(&graph) {}
1624 1159

	
1625 1160
      /// \brief Constructor.
1626 1161
      ///
1627 1162
      /// Constructor for creating an id-to-item map.
1628
      explicit InverseMap(const IdMap& idMap) : digraph(idMap.digraph) {}
1163
      explicit InverseMap(const IdMap& map) : _graph(map._graph) {}
1629 1164

	
1630 1165
      /// \brief Gives back the given item from its id.
1631 1166
      ///
1632 1167
      /// Gives back the given item from its id.
1633 1168
      /// 
1634
      Item operator[](int id) const { return digraph->fromId(id, Item());}
1169
      Item operator[](int id) const { return _graph->fromId(id, Item());}
1635 1170

	
1636 1171
    private:
1637
      const Digraph* digraph;
1172
      const Graph* _graph;
1638 1173
    };
1639 1174

	
1640 1175
    /// \brief Gives back the inverse of the map.
1641 1176
    ///
1642 1177
    /// Gives back the inverse of the IdMap.
1643
    InverseMap inverse() const { return InverseMap(*digraph);} 
1178
    InverseMap inverse() const { return InverseMap(*_graph);} 
1644 1179

	
1645 1180
  };
1646 1181

	
1647 1182
  
1648
  /// \brief General invertable digraph-map type.
1183
  /// \brief General invertable graph-map type.
1649 1184

	
1650
  /// This type provides simple invertable digraph-maps. 
1185
  /// This type provides simple invertable graph-maps. 
1651 1186
  /// The InvertableMap wraps an arbitrary ReadWriteMap 
1652 1187
  /// and if a key is set to a new value then store it
1653 1188
  /// in the inverse map.
... ...
@@ -1655,20 +1190,20 @@
1655 1190
  /// The values of the map can be accessed
1656 1191
  /// with stl compatible forward iterator.
1657 1192
  ///
1658
  /// \param _Digraph The digraph type.
1659
  /// \param _Item The item type of the digraph.
1193
  /// \param _Graph The graph type.
1194
  /// \param _Item The item type of the graph.
1660 1195
  /// \param _Value The value type of the map.
1661 1196
  ///
1662 1197
  /// \see IterableValueMap
1663
  template <typename _Digraph, typename _Item, typename _Value>
1664
  class InvertableMap : protected DefaultMap<_Digraph, _Item, _Value> {
1198
  template <typename _Graph, typename _Item, typename _Value>
1199
  class InvertableMap : protected DefaultMap<_Graph, _Item, _Value> {
1665 1200
  private:
1666 1201
    
1667
    typedef DefaultMap<_Digraph, _Item, _Value> Map;
1668
    typedef _Digraph Digraph;
1202
    typedef DefaultMap<_Graph, _Item, _Value> Map;
1203
    typedef _Graph Graph;
1669 1204

	
1670 1205
    typedef std::map<_Value, _Item> Container;
1671
    Container invMap;    
1206
    Container _inv_map;    
1672 1207

	
1673 1208
  public:
1674 1209
 
... ...
@@ -1681,9 +1216,9 @@
1681 1216

	
1682 1217
    /// \brief Constructor.
1683 1218
    ///
1684
    /// Construct a new InvertableMap for the digraph.
1219
    /// Construct a new InvertableMap for the graph.
1685 1220
    ///
1686
    explicit InvertableMap(const Digraph& digraph) : Map(digraph) {} 
1221
    explicit InvertableMap(const Graph& graph) : Map(graph) {} 
1687 1222

	
1688 1223
    /// \brief Forward iterator for values.
1689 1224
    ///
... ...
@@ -1725,7 +1260,7 @@
1725 1260
    /// map can be accessed in the [beginValue, endValue)
1726 1261
    /// range.
1727 1262
    ValueIterator beginValue() const {
1728
      return ValueIterator(invMap.begin());
1263
      return ValueIterator(_inv_map.begin());
1729 1264
    }
1730 1265

	
1731 1266
    /// \brief Returns an iterator after the last value.
... ...
@@ -1735,7 +1270,7 @@
1735 1270
    /// map can be accessed in the [beginValue, endValue)
1736 1271
    /// range.
1737 1272
    ValueIterator endValue() const {
1738
      return ValueIterator(invMap.end());
1273
      return ValueIterator(_inv_map.end());
1739 1274
    }
1740 1275
    
1741 1276
    /// \brief The setter function of the map.
... ...
@@ -1743,11 +1278,11 @@
1743 1278
    /// Sets the mapped value.
1744 1279
    void set(const Key& key, const Value& val) {
1745 1280
      Value oldval = Map::operator[](key);
1746
      typename Container::iterator it = invMap.find(oldval);
1747
      if (it != invMap.end() && it->second == key) {
1748
	invMap.erase(it);
1281
      typename Container::iterator it = _inv_map.find(oldval);
1282
      if (it != _inv_map.end() && it->second == key) {
1283
	_inv_map.erase(it);
1749 1284
      }      
1750
      invMap.insert(make_pair(val, key));
1285
      _inv_map.insert(make_pair(val, key));
1751 1286
      Map::set(key, val);
1752 1287
    }
1753 1288

	
... ...
@@ -1763,8 +1298,8 @@
1763 1298
    ///
1764 1299
    /// Gives back the item by its value.
1765 1300
    Key operator()(const Value& key) const {
1766
      typename Container::const_iterator it = invMap.find(key);
1767
      return it != invMap.end() ? it->second : INVALID;
1301
      typename Container::const_iterator it = _inv_map.find(key);
1302
      return it != _inv_map.end() ? it->second : INVALID;
1768 1303
    }
1769 1304

	
1770 1305
  protected:
... ...
@@ -1775,9 +1310,9 @@
1775 1310
    /// \c AlterationNotifier.
1776 1311
    virtual void erase(const Key& key) {
1777 1312
      Value val = Map::operator[](key);
1778
      typename Container::iterator it = invMap.find(val);
1779
      if (it != invMap.end() && it->second == key) {
1780
	invMap.erase(it);
1313
      typename Container::iterator it = _inv_map.find(val);
1314
      if (it != _inv_map.end() && it->second == key) {
1315
	_inv_map.erase(it);
1781 1316
      }
1782 1317
      Map::erase(key);
1783 1318
    }
... ...
@@ -1789,9 +1324,9 @@
1789 1324
    virtual void erase(const std::vector<Key>& keys) {
1790 1325
      for (int i = 0; i < int(keys.size()); ++i) {
1791 1326
	Value val = Map::operator[](keys[i]);
1792
	typename Container::iterator it = invMap.find(val);
1793
	if (it != invMap.end() && it->second == keys[i]) {
1794
	  invMap.erase(it);
1327
	typename Container::iterator it = _inv_map.find(val);
1328
	if (it != _inv_map.end() && it->second == keys[i]) {
1329
	  _inv_map.erase(it);
1795 1330
	}
1796 1331
      }
1797 1332
      Map::erase(keys);
... ...
@@ -1802,7 +1337,7 @@
1802 1337
    /// Clear the keys from the map and inverse map. It is called by the
1803 1338
    /// \c AlterationNotifier.
1804 1339
    virtual void clear() {
1805
      invMap.clear();
1340
      _inv_map.clear();
1806 1341
      Map::clear();
1807 1342
    }
1808 1343

	
... ...
@@ -1817,8 +1352,8 @@
1817 1352
      /// \brief Constructor of the InverseMap.
1818 1353
      ///
1819 1354
      /// Constructor of the InverseMap.
1820
      explicit InverseMap(const InvertableMap& _inverted) 
1821
        : inverted(_inverted) {}
1355
      explicit InverseMap(const InvertableMap& inverted) 
1356
        : _inverted(inverted) {}
1822 1357

	
1823 1358
      /// The value type of the InverseMap.
1824 1359
      typedef typename InvertableMap::Key Value;
... ...
@@ -1830,11 +1365,11 @@
1830 1365
      /// Subscript operator. It gives back always the item 
1831 1366
      /// what was last assigned to the value.
1832 1367
      Value operator[](const Key& key) const {
1833
	return inverted(key);
1368
	return _inverted(key);
1834 1369
      }
1835 1370
      
1836 1371
    private:
1837
      const InvertableMap& inverted;
1372
      const InvertableMap& _inverted;
1838 1373
    };
1839 1374

	
1840 1375
    /// \brief It gives back the just readable inverse map.
... ...
@@ -1849,29 +1384,29 @@
1849 1384
  };
1850 1385

	
1851 1386
  /// \brief Provides a mutable, continuous and unique descriptor for each 
1852
  /// item in the digraph.
1387
  /// item in the graph.
1853 1388
  ///
1854 1389
  /// The DescriptorMap class provides a unique and continuous (but mutable)
1855 1390
  /// descriptor (id) for each item of the same type (e.g. node) in the
1856
  /// digraph. This id is <ul><li>\b unique: different items (nodes) get
1391
  /// graph. This id is <ul><li>\b unique: different items (nodes) get
1857 1392
  /// different ids <li>\b continuous: the range of the ids is the set of
1858 1393
  /// integers between 0 and \c n-1, where \c n is the number of the items of
1859 1394
  /// this type (e.g. nodes) (so the id of a node can change if you delete an
1860 1395
  /// other node, i.e. this id is mutable).  </ul> This map can be inverted
1861
  /// with its member class \c InverseMap.
1396
  /// with its member class \c InverseMap, or with the \c operator() member.
1862 1397
  ///
1863
  /// \param _Digraph The digraph class the \c DescriptorMap belongs to.
1398
  /// \param _Graph The graph class the \c DescriptorMap belongs to.
1864 1399
  /// \param _Item The Item is the Key of the Map. It may be Node, Arc or 
1865 1400
  /// Edge.
1866
  template <typename _Digraph, typename _Item>
1867
  class DescriptorMap : protected DefaultMap<_Digraph, _Item, int> {
1401
  template <typename _Graph, typename _Item>
1402
  class DescriptorMap : protected DefaultMap<_Graph, _Item, int> {
1868 1403

	
1869 1404
    typedef _Item Item;
1870
    typedef DefaultMap<_Digraph, _Item, int> Map;
1405
    typedef DefaultMap<_Graph, _Item, int> Map;
1871 1406

	
1872 1407
  public:
1873
    /// The digraph class of DescriptorMap.
1874
    typedef _Digraph Digraph;
1408
    /// The graph class of DescriptorMap.
1409
    typedef _Graph Graph;
1875 1410

	
1876 1411
    /// The key type of DescriptorMap (Node, Arc, Edge).
1877 1412
    typedef typename Map::Key Key;
... ...
@@ -1881,12 +1416,12 @@
1881 1416
    /// \brief Constructor.
1882 1417
    ///
1883 1418
    /// Constructor for descriptor map.
1884
    explicit DescriptorMap(const Digraph& _digraph) : Map(_digraph) {
1419
    explicit DescriptorMap(const Graph& _graph) : Map(_graph) {
1885 1420
      Item it;
1886 1421
      const typename Map::Notifier* nf = Map::notifier(); 
1887 1422
      for (nf->first(it); it != INVALID; nf->next(it)) {
1888
	Map::set(it, invMap.size());
1889
	invMap.push_back(it);	
1423
	Map::set(it, _inv_map.size());
1424
	_inv_map.push_back(it);	
1890 1425
      }      
1891 1426
    }
1892 1427

	
... ...
@@ -1898,8 +1433,8 @@
1898 1433
    /// \c AlterationNotifier.
1899 1434
    virtual void add(const Item& item) {
1900 1435
      Map::add(item);
1901
      Map::set(item, invMap.size());
1902
      invMap.push_back(item);
1436
      Map::set(item, _inv_map.size());
1437
      _inv_map.push_back(item);
1903 1438
    }
1904 1439

	
1905 1440
    /// \brief Add more new keys to the map.
... ...
@@ -1909,8 +1444,8 @@
1909 1444
    virtual void add(const std::vector<Item>& items) {
1910 1445
      Map::add(items);
1911 1446
      for (int i = 0; i < int(items.size()); ++i) {
1912
	Map::set(items[i], invMap.size());
1913
	invMap.push_back(items[i]);
1447
	Map::set(items[i], _inv_map.size());
1448
	_inv_map.push_back(items[i]);
1914 1449
      }
1915 1450
    }
1916 1451

	
... ...
@@ -1919,9 +1454,9 @@
1919 1454
    /// Erase the key from the map. It is called by the
1920 1455
    /// \c AlterationNotifier.
1921 1456
    virtual void erase(const Item& item) {
1922
      Map::set(invMap.back(), Map::operator[](item));
1923
      invMap[Map::operator[](item)] = invMap.back();
1924
      invMap.pop_back();
1457
      Map::set(_inv_map.back(), Map::operator[](item));
1458
      _inv_map[Map::operator[](item)] = _inv_map.back();
1459
      _inv_map.pop_back();
1925 1460
      Map::erase(item);
1926 1461
    }
1927 1462

	
... ...
@@ -1931,9 +1466,9 @@
1931 1466
    /// \c AlterationNotifier.
1932 1467
    virtual void erase(const std::vector<Item>& items) {
1933 1468
      for (int i = 0; i < int(items.size()); ++i) {
1934
	Map::set(invMap.back(), Map::operator[](items[i]));
1935
	invMap[Map::operator[](items[i])] = invMap.back();
1936
	invMap.pop_back();
1469
	Map::set(_inv_map.back(), Map::operator[](items[i]));
1470
	_inv_map[Map::operator[](items[i])] = _inv_map.back();
1471
	_inv_map.pop_back();
1937 1472
      }
1938 1473
      Map::erase(items);
1939 1474
    }
... ...
@@ -1947,8 +1482,8 @@
1947 1482
      Item it;
1948 1483
      const typename Map::Notifier* nf = Map::notifier(); 
1949 1484
      for (nf->first(it); it != INVALID; nf->next(it)) {
1950
	Map::set(it, invMap.size());
1951
	invMap.push_back(it);	
1485
	Map::set(it, _inv_map.size());
1486
	_inv_map.push_back(it);	
1952 1487
      }      
1953 1488
    }
1954 1489
    
... ...
@@ -1957,7 +1492,7 @@
1957 1492
    /// Clear the keys from the map. It is called by the
1958 1493
    /// \c AlterationNotifier.
1959 1494
    virtual void clear() {
1960
      invMap.clear();
1495
      _inv_map.clear();
1961 1496
      Map::clear();
1962 1497
    }
1963 1498

	
... ...
@@ -1967,7 +1502,7 @@
1967 1502
    ///
1968 1503
    /// Returns the maximal value plus one in the map.
1969 1504
    unsigned int size() const {
1970
      return invMap.size();
1505
      return _inv_map.size();
1971 1506
    }
1972 1507

	
1973 1508
    /// \brief Swaps the position of the two items in the map.
... ...
@@ -1977,9 +1512,9 @@
1977 1512
      int pi = Map::operator[](p);
1978 1513
      int qi = Map::operator[](q);
1979 1514
      Map::set(p, qi);
1980
      invMap[qi] = p;
1515
      _inv_map[qi] = p;
1981 1516
      Map::set(q, pi);
1982
      invMap[pi] = q;
1517
      _inv_map[pi] = q;
1983 1518
    }
1984 1519

	
1985 1520
    /// \brief Gives back the \e descriptor of the item.
... ...
@@ -1993,13 +1528,13 @@
1993 1528
    ///
1994 1529
    /// Gives back th item by its descriptor.
1995 1530
    Item operator()(int id) const {
1996
      return invMap[id];
1531
      return _inv_map[id];
1997 1532
    }
1998 1533
    
1999 1534
  private:
2000 1535

	
2001 1536
    typedef std::vector<Item> Container;
2002
    Container invMap;
1537
    Container _inv_map;
2003 1538

	
2004 1539
  public:
2005 1540
    /// \brief The inverse map type of DescriptorMap.
... ...
@@ -2010,8 +1545,8 @@
2010 1545
      /// \brief Constructor of the InverseMap.
2011 1546
      ///
2012 1547
      /// Constructor of the InverseMap.
2013
      explicit InverseMap(const DescriptorMap& _inverted) 
2014
	: inverted(_inverted) {}
1548
      explicit InverseMap(const DescriptorMap& inverted) 
1549
	: _inverted(inverted) {}
2015 1550

	
2016 1551

	
2017 1552
      /// The value type of the InverseMap.
... ...
@@ -2024,18 +1559,18 @@
2024 1559
      /// Subscript operator. It gives back the item 
2025 1560
      /// that the descriptor belongs to currently.
2026 1561
      Value operator[](const Key& key) const {
2027
	return inverted(key);
1562
	return _inverted(key);
2028 1563
      }
2029 1564

	
2030 1565
      /// \brief Size of the map.
2031 1566
      ///
2032 1567
      /// Returns the size of the map.
2033 1568
      unsigned int size() const {
2034
	return inverted.size();
1569
	return _inverted.size();
2035 1570
      }
2036 1571
      
2037 1572
    private:
2038
      const DescriptorMap& inverted;
1573
      const DescriptorMap& _inverted;
2039 1574
    };
2040 1575

	
2041 1576
    /// \brief Gives back the inverse of the map.
... ...
@@ -2062,7 +1597,7 @@
2062 1597
    ///
2063 1598
    /// Constructor
2064 1599
    /// \param _digraph The digraph that the map belongs to.
2065
    explicit SourceMap(const Digraph& _digraph) : digraph(_digraph) {}
1600
    explicit SourceMap(const Digraph& digraph) : _digraph(digraph) {}
2066 1601

	
2067 1602
    /// \brief The subscript operator.
2068 1603
    ///
... ...
@@ -2070,11 +1605,11 @@
2070 1605
    /// \param arc The arc 
2071 1606
    /// \return The source of the arc 
2072 1607
    Value operator[](const Key& arc) const {
2073
      return digraph.source(arc);
1608
      return _digraph.source(arc);
2074 1609
    }
2075 1610

	
2076 1611
  private:
2077
    const Digraph& digraph;
1612
    const Digraph& _digraph;
2078 1613
  };
2079 1614

	
2080 1615
  /// \brief Returns a \ref SourceMap class.
... ...
@@ -2102,7 +1637,7 @@
2102 1637
    ///
2103 1638
    /// Constructor
2104 1639
    /// \param _digraph The digraph that the map belongs to.
2105
    explicit TargetMap(const Digraph& _digraph) : digraph(_digraph) {}
1640
    explicit TargetMap(const Digraph& digraph) : _digraph(digraph) {}
2106 1641

	
2107 1642
    /// \brief The subscript operator.
2108 1643
    ///
... ...
@@ -2110,11 +1645,11 @@
2110 1645
    /// \param e The arc 
2111 1646
    /// \return The target of the arc 
2112 1647
    Value operator[](const Key& e) const {
2113
      return digraph.target(e);
1648
      return _digraph.target(e);
2114 1649
    }
2115 1650

	
2116 1651
  private:
2117
    const Digraph& digraph;
1652
    const Digraph& _digraph;
2118 1653
  };
2119 1654

	
2120 1655
  /// \brief Returns a \ref TargetMap class.
... ...
@@ -2131,18 +1666,18 @@
2131 1666
  /// Returns the "forward" directed arc view of an edge.
2132 1667
  /// \see BackwardMap
2133 1668
  /// \author Balazs Dezso
2134
  template <typename Digraph>
1669
  template <typename Graph>
2135 1670
  class ForwardMap {
2136 1671
  public:
2137 1672

	
2138
    typedef typename Digraph::Arc Value;
2139
    typedef typename Digraph::Edge Key;
1673
    typedef typename Graph::Arc Value;
1674
    typedef typename Graph::Edge Key;
2140 1675

	
2141 1676
    /// \brief Constructor
2142 1677
    ///
2143 1678
    /// Constructor
2144
    /// \param _digraph The digraph that the map belongs to.
2145
    explicit ForwardMap(const Digraph& _digraph) : digraph(_digraph) {}
1679
    /// \param _graph The graph that the map belongs to.
1680
    explicit ForwardMap(const Graph& graph) : _graph(graph) {}
2146 1681

	
2147 1682
    /// \brief The subscript operator.
2148 1683
    ///
... ...
@@ -2150,20 +1685,20 @@
2150 1685
    /// \param key An edge 
2151 1686
    /// \return The "forward" directed arc view of edge 
2152 1687
    Value operator[](const Key& key) const {
2153
      return digraph.direct(key, true);
1688
      return _graph.direct(key, true);
2154 1689
    }
2155 1690

	
2156 1691
  private:
2157
    const Digraph& digraph;
1692
    const Graph& _graph;
2158 1693
  };
2159 1694

	
2160 1695
  /// \brief Returns a \ref ForwardMap class.
2161 1696
  ///
2162 1697
  /// This function just returns an \ref ForwardMap class.
2163 1698
  /// \relates ForwardMap
2164
  template <typename Digraph>
2165
  inline ForwardMap<Digraph> forwardMap(const Digraph& digraph) {
2166
    return ForwardMap<Digraph>(digraph);
1699
  template <typename Graph>
1700
  inline ForwardMap<Graph> forwardMap(const Graph& graph) {
1701
    return ForwardMap<Graph>(graph);
2167 1702
  }
2168 1703

	
2169 1704
  /// \brief Returns the "backward" directed arc view of an edge.
... ...
@@ -2171,18 +1706,18 @@
2171 1706
  /// Returns the "backward" directed arc view of an edge.
2172 1707
  /// \see ForwardMap
2173 1708
  /// \author Balazs Dezso
2174
  template <typename Digraph>
1709
  template <typename Graph>
2175 1710
  class BackwardMap {
2176 1711
  public:
2177 1712

	
2178
    typedef typename Digraph::Arc Value;
2179
    typedef typename Digraph::Edge Key;
1713
    typedef typename Graph::Arc Value;
1714
    typedef typename Graph::Edge Key;
2180 1715

	
2181 1716
    /// \brief Constructor
2182 1717
    ///
2183 1718
    /// Constructor
2184
    /// \param _digraph The digraph that the map belongs to.
2185
    explicit BackwardMap(const Digraph& _digraph) : digraph(_digraph) {}
1719
    /// \param _graph The graph that the map belongs to.
1720
    explicit BackwardMap(const Graph& graph) : _graph(graph) {}
2186 1721

	
2187 1722
    /// \brief The subscript operator.
2188 1723
    ///
... ...
@@ -2190,20 +1725,20 @@
2190 1725
    /// \param key An edge 
2191 1726
    /// \return The "backward" directed arc view of edge 
2192 1727
    Value operator[](const Key& key) const {
2193
      return digraph.direct(key, false);
1728
      return _graph.direct(key, false);
2194 1729
    }
2195 1730

	
2196 1731
  private:
2197
    const Digraph& digraph;
1732
    const Graph& _graph;
2198 1733
  };
2199 1734

	
2200 1735
  /// \brief Returns a \ref BackwardMap class
2201 1736

	
2202 1737
  /// This function just returns a \ref BackwardMap class.
2203 1738
  /// \relates BackwardMap
2204
  template <typename Digraph>
2205
  inline BackwardMap<Digraph> backwardMap(const Digraph& digraph) {
2206
    return BackwardMap<Digraph>(digraph);
1739
  template <typename Graph>
1740
  inline BackwardMap<Graph> backwardMap(const Graph& graph) {
1741
    return BackwardMap<Graph>(graph);
2207 1742
  }
2208 1743

	
2209 1744
  /// \brief Potential difference map
... ...
@@ -2220,20 +1755,21 @@
2220 1755
    /// \brief Constructor
2221 1756
    ///
2222 1757
    /// Contructor of the map
2223
    explicit PotentialDifferenceMap(const Digraph& _digraph, 
2224
                                    const NodeMap& _potential) 
2225
      : digraph(_digraph), potential(_potential) {}
1758
    explicit PotentialDifferenceMap(const Digraph& digraph, 
1759
                                    const NodeMap& potential) 
1760
      : _digraph(digraph), _potential(potential) {}
2226 1761

	
2227 1762
    /// \brief Const subscription operator
2228 1763
    ///
2229 1764
    /// Const subscription operator
2230 1765
    Value operator[](const Key& arc) const {
2231
      return potential[digraph.target(arc)] - potential[digraph.source(arc)];
1766
      return _potential[_digraph.target(arc)] - 
1767
	_potential[_digraph.source(arc)];
2232 1768
    }
2233 1769

	
2234 1770
  private:
2235
    const Digraph& digraph;
2236
    const NodeMap& potential;
1771
    const Digraph& _digraph;
1772
    const NodeMap& _potential;
2237 1773
  };
2238 1774

	
2239 1775
  /// \brief Returns a PotentialDifferenceMap.
... ...
@@ -2274,16 +1810,15 @@
2274 1810
    typedef int Value;
2275 1811
    typedef typename Digraph::Node Key;
2276 1812

	
2277
    typedef typename ItemSetTraits<_Digraph, typename _Digraph::Arc>
1813
    typedef typename ItemSetTraits<Digraph, typename Digraph::Arc>
2278 1814
    ::ItemNotifier::ObserverBase Parent;
2279 1815

	
2280 1816
  private:
2281 1817

	
2282
    class AutoNodeMap : public DefaultMap<_Digraph, Key, int> {
1818
    class AutoNodeMap : public DefaultMap<Digraph, Key, int> {
2283 1819
    public:
2284 1820

	
2285
      typedef DefaultMap<_Digraph, Key, int> Parent;
2286
      typedef typename Parent::Digraph Digraph;
1821
      typedef DefaultMap<Digraph, Key, int> Parent;
2287 1822

	
2288 1823
      AutoNodeMap(const Digraph& digraph) : Parent(digraph, 0) {}
2289 1824
      
... ...
@@ -2314,17 +1849,18 @@
2314 1849
    /// \brief Constructor.
2315 1850
    ///
2316 1851
    /// Constructor for creating in-degree map.
2317
    explicit InDegMap(const Digraph& _digraph) : digraph(_digraph), deg(_digraph) {
2318
      Parent::attach(digraph.notifier(typename _Digraph::Arc()));
1852
    explicit InDegMap(const Digraph& digraph) 
1853
      : _digraph(digraph), _deg(digraph) {
1854
      Parent::attach(_digraph.notifier(typename Digraph::Arc()));
2319 1855
      
2320
      for(typename _Digraph::NodeIt it(digraph); it != INVALID; ++it) {
2321
	deg[it] = countInArcs(digraph, it);
1856
      for(typename Digraph::NodeIt it(_digraph); it != INVALID; ++it) {
1857
	_deg[it] = countInArcs(_digraph, it);
2322 1858
      }
2323 1859
    }
2324 1860
    
2325 1861
    /// Gives back the in-degree of a Node.
2326 1862
    int operator[](const Key& key) const {
2327
      return deg[key];
1863
      return _deg[key];
2328 1864
    }
2329 1865

	
2330 1866
  protected:
... ...
@@ -2332,40 +1868,40 @@
2332 1868
    typedef typename Digraph::Arc Arc;
2333 1869

	
2334 1870
    virtual void add(const Arc& arc) {
2335
      ++deg[digraph.target(arc)];
1871
      ++_deg[_digraph.target(arc)];
2336 1872
    }
2337 1873

	
2338 1874
    virtual void add(const std::vector<Arc>& arcs) {
2339 1875
      for (int i = 0; i < int(arcs.size()); ++i) {
2340
        ++deg[digraph.target(arcs[i])];
1876
        ++_deg[_digraph.target(arcs[i])];
2341 1877
      }
2342 1878
    }
2343 1879

	
2344 1880
    virtual void erase(const Arc& arc) {
2345
      --deg[digraph.target(arc)];
1881
      --_deg[_digraph.target(arc)];
2346 1882
    }
2347 1883

	
2348 1884
    virtual void erase(const std::vector<Arc>& arcs) {
2349 1885
      for (int i = 0; i < int(arcs.size()); ++i) {
2350
        --deg[digraph.target(arcs[i])];
1886
        --_deg[_digraph.target(arcs[i])];
2351 1887
      }
2352 1888
    }
2353 1889

	
2354 1890
    virtual void build() {
2355
      for(typename _Digraph::NodeIt it(digraph); it != INVALID; ++it) {
2356
	deg[it] = countInArcs(digraph, it);
1891
      for(typename Digraph::NodeIt it(_digraph); it != INVALID; ++it) {
1892
	_deg[it] = countInArcs(_digraph, it);
2357 1893
      }      
2358 1894
    }
2359 1895

	
2360 1896
    virtual void clear() {
2361
      for(typename _Digraph::NodeIt it(digraph); it != INVALID; ++it) {
2362
	deg[it] = 0;
1897
      for(typename Digraph::NodeIt it(_digraph); it != INVALID; ++it) {
1898
	_deg[it] = 0;
2363 1899
      }
2364 1900
    }
2365 1901
  private:
2366 1902
    
2367
    const _Digraph& digraph;
2368
    AutoNodeMap deg;
1903
    const Digraph& _digraph;
1904
    AutoNodeMap _deg;
2369 1905
  };
2370 1906

	
2371 1907
  /// \brief Map of the node out-degrees.
... ...
@@ -2391,21 +1927,20 @@
2391 1927
      ::ItemNotifier::ObserverBase {
2392 1928

	
2393 1929
  public:
2394

	
2395
    typedef typename ItemSetTraits<_Digraph, typename _Digraph::Arc>
2396
    ::ItemNotifier::ObserverBase Parent;
2397 1930
    
2398 1931
    typedef _Digraph Digraph;
2399 1932
    typedef int Value;
2400 1933
    typedef typename Digraph::Node Key;
2401 1934

	
1935
    typedef typename ItemSetTraits<Digraph, typename Digraph::Arc>
1936
    ::ItemNotifier::ObserverBase Parent;
1937

	
2402 1938
  private:
2403 1939

	
2404
    class AutoNodeMap : public DefaultMap<_Digraph, Key, int> {
1940
    class AutoNodeMap : public DefaultMap<Digraph, Key, int> {
2405 1941
    public:
2406 1942

	
2407
      typedef DefaultMap<_Digraph, Key, int> Parent;
2408
      typedef typename Parent::Digraph Digraph;
1943
      typedef DefaultMap<Digraph, Key, int> Parent;
2409 1944

	
2410 1945
      AutoNodeMap(const Digraph& digraph) : Parent(digraph, 0) {}
2411 1946
      
... ...
@@ -2434,17 +1969,18 @@
2434 1969
    /// \brief Constructor.
2435 1970
    ///
2436 1971
    /// Constructor for creating out-degree map.
2437
    explicit OutDegMap(const Digraph& _digraph) : digraph(_digraph), deg(_digraph) {
2438
      Parent::attach(digraph.notifier(typename _Digraph::Arc()));
1972
    explicit OutDegMap(const Digraph& digraph) 
1973
      : _digraph(digraph), _deg(digraph) {
1974
      Parent::attach(_digraph.notifier(typename Digraph::Arc()));
2439 1975
      
2440
      for(typename _Digraph::NodeIt it(digraph); it != INVALID; ++it) {
2441
	deg[it] = countOutArcs(digraph, it);
1976
      for(typename Digraph::NodeIt it(_digraph); it != INVALID; ++it) {
1977
	_deg[it] = countOutArcs(_digraph, it);
2442 1978
      }
2443 1979
    }
2444 1980

	
2445 1981
    /// Gives back the out-degree of a Node.
2446 1982
    int operator[](const Key& key) const {
2447
      return deg[key];
1983
      return _deg[key];
2448 1984
    }
2449 1985

	
2450 1986
  protected:
... ...
@@ -2452,40 +1988,40 @@
2452 1988
    typedef typename Digraph::Arc Arc;
2453 1989

	
2454 1990
    virtual void add(const Arc& arc) {
2455
      ++deg[digraph.source(arc)];
1991
      ++_deg[_digraph.source(arc)];
2456 1992
    }
2457 1993

	
2458 1994
    virtual void add(const std::vector<Arc>& arcs) {
2459 1995
      for (int i = 0; i < int(arcs.size()); ++i) {
2460
        ++deg[digraph.source(arcs[i])];
1996
        ++_deg[_digraph.source(arcs[i])];
2461 1997
      }
2462 1998
    }
2463 1999

	
2464 2000
    virtual void erase(const Arc& arc) {
2465
      --deg[digraph.source(arc)];
2001
      --_deg[_digraph.source(arc)];
2466 2002
    }
2467 2003

	
2468 2004
    virtual void erase(const std::vector<Arc>& arcs) {
2469 2005
      for (int i = 0; i < int(arcs.size()); ++i) {
2470
        --deg[digraph.source(arcs[i])];
2006
        --_deg[_digraph.source(arcs[i])];
2471 2007
      }
2472 2008
    }
2473 2009

	
2474 2010
    virtual void build() {
2475
      for(typename _Digraph::NodeIt it(digraph); it != INVALID; ++it) {
2476
	deg[it] = countOutArcs(digraph, it);
2011
      for(typename Digraph::NodeIt it(_digraph); it != INVALID; ++it) {
2012
	_deg[it] = countOutArcs(_digraph, it);
2477 2013
      }      
2478 2014
    }
2479 2015

	
2480 2016
    virtual void clear() {
2481
      for(typename _Digraph::NodeIt it(digraph); it != INVALID; ++it) {
2482
	deg[it] = 0;
2017
      for(typename Digraph::NodeIt it(_digraph); it != INVALID; ++it) {
2018
	_deg[it] = 0;
2483 2019
      }
2484 2020
    }
2485 2021
  private:
2486 2022
    
2487
    const _Digraph& digraph;
2488
    AutoNodeMap deg;
2023
    const Digraph& _digraph;
2024
    AutoNodeMap _deg;
2489 2025
  };
2490 2026

	
2491 2027

	
... ...
@@ -2500,7 +2036,7 @@
2500 2036
  ///the \c findFirst() and \c findNext() members.
2501 2037
  ///
2502 2038
  ///See the \ref ArcLookUp and \ref AllArcLookUp classes if your
2503
  ///digraph do not changed so frequently.
2039
  ///digraph is not changed so frequently.
2504 2040
  ///
2505 2041
  ///This class uses a self-adjusting binary search tree, Sleator's
2506 2042
  ///and Tarjan's Splay tree for guarantee the logarithmic amortized
... ...
@@ -2520,7 +2056,7 @@
2520 2056
    typedef typename ItemSetTraits<G, typename G::Arc>
2521 2057
    ::ItemNotifier::ObserverBase Parent;
2522 2058

	
2523
    GRAPH_TYPEDEFS(typename G);
2059
    DIGRAPH_TYPEDEFS(typename G);
2524 2060
    typedef G Digraph;
2525 2061

	
2526 2062
  protected:
... ...
@@ -2835,24 +2371,24 @@
2835 2371
    ///\ref INVALID otherwise.
2836 2372
    Arc operator()(Node s, Node t) const
2837 2373
    {
2838
      Arc e = _head[s];
2374
      Arc a = _head[s];
2839 2375
      while (true) {
2840
	if (_g.target(e) == t) {
2841
	  const_cast<DynArcLookUp&>(*this).splay(e);
2842
	  return e;
2843
	} else if (t < _g.target(e)) {
2844
	  if (_left[e] == INVALID) {
2845
	    const_cast<DynArcLookUp&>(*this).splay(e);
2376
	if (_g.target(a) == t) {
2377
	  const_cast<DynArcLookUp&>(*this).splay(a);
2378
	  return a;
2379
	} else if (t < _g.target(a)) {
2380
	  if (_left[a] == INVALID) {
2381
	    const_cast<DynArcLookUp&>(*this).splay(a);
2846 2382
	    return INVALID;
2847 2383
	  } else {
2848
	    e = _left[e];
2384
	    a = _left[a];
2849 2385
	  }
2850 2386
	} else  {
2851
	  if (_right[e] == INVALID) {
2852
	    const_cast<DynArcLookUp&>(*this).splay(e);
2387
	  if (_right[a] == INVALID) {
2388
	    const_cast<DynArcLookUp&>(*this).splay(a);
2853 2389
	    return INVALID;
2854 2390
	  } else {
2855
	    e = _right[e];
2391
	    a = _right[a];
2856 2392
	  }
2857 2393
	}
2858 2394
      }
... ...
@@ -2869,25 +2405,25 @@
2869 2405
    /// otherwise.
2870 2406
    Arc findFirst(Node s, Node t) const
2871 2407
    {
2872
      Arc e = _head[s];
2408
      Arc a = _head[s];
2873 2409
      Arc r = INVALID;
2874 2410
      while (true) {
2875
	if (_g.target(e) < t) {
2876
	  if (_right[e] == INVALID) {
2877
	    const_cast<DynArcLookUp&>(*this).splay(e);
2411
	if (_g.target(a) < t) {
2412
	  if (_right[a] == INVALID) {
2413
	    const_cast<DynArcLookUp&>(*this).splay(a);
2878 2414
	    return r;
2879 2415
	  } else {
2880
	    e = _right[e];
2416
	    a = _right[a];
2881 2417
	  }
2882 2418
	} else {
2883
	  if (_g.target(e) == t) {
2884
	    r = e;
2419
	  if (_g.target(a) == t) {
2420
	    r = a;
2885 2421
	  }
2886
	  if (_left[e] == INVALID) {
2887
	    const_cast<DynArcLookUp&>(*this).splay(e);
2422
	  if (_left[a] == INVALID) {
2423
	    const_cast<DynArcLookUp&>(*this).splay(a);
2888 2424
	    return r;
2889 2425
	  } else {
2890
	    e = _left[e];
2426
	    a = _left[a];
2891 2427
	  }
2892 2428
	}
2893 2429
      }
... ...
@@ -2906,29 +2442,29 @@
2906 2442
    ///\note If \c e is not the result of the previous \c findFirst()
2907 2443
    ///operation then the amorized time bound can not be guaranteed.
2908 2444
#ifdef DOXYGEN
2909
    Arc findNext(Node s, Node t, Arc e) const
2445
    Arc findNext(Node s, Node t, Arc a) const
2910 2446
#else
2911
    Arc findNext(Node, Node t, Arc e) const
2447
    Arc findNext(Node, Node t, Arc a) const
2912 2448
#endif
2913 2449
    {
2914
      if (_right[e] != INVALID) {
2915
	e = _right[e];
2916
	while (_left[e] != INVALID) {
2917
	  e = _left[e];
2450
      if (_right[a] != INVALID) {
2451
	a = _right[a];
2452
	while (_left[a] != INVALID) {
2453
	  a = _left[a];
2918 2454
	}
2919
	const_cast<DynArcLookUp&>(*this).splay(e);
2455
	const_cast<DynArcLookUp&>(*this).splay(a);
2920 2456
      } else {
2921
	while (_parent[e] != INVALID && _right[_parent[e]] ==  e) {
2922
	  e = _parent[e];
2457
	while (_parent[a] != INVALID && _right[_parent[a]] ==  a) {
2458
	  a = _parent[a];
2923 2459
	}
2924
	if (_parent[e] == INVALID) {
2460
	if (_parent[a] == INVALID) {
2925 2461
	  return INVALID;
2926 2462
	} else {
2927
	  e = _parent[e];
2928
	  const_cast<DynArcLookUp&>(*this).splay(e);
2463
	  a = _parent[a];
2464
	  const_cast<DynArcLookUp&>(*this).splay(a);
2929 2465
	}
2930 2466
      }
2931
      if (_g.target(e) == t) return e;
2467
      if (_g.target(a) == t) return a;
2932 2468
      else return INVALID;    
2933 2469
    }
2934 2470

	
... ...
@@ -2957,7 +2493,7 @@
2957 2493
  class ArcLookUp 
2958 2494
  {
2959 2495
  public:
2960
    GRAPH_TYPEDEFS(typename G);
2496
    DIGRAPH_TYPEDEFS(typename G);
2961 2497
    typedef G Digraph;
2962 2498

	
2963 2499
  protected:
... ...
@@ -3074,7 +2610,7 @@
3074 2610
    using ArcLookUp<G>::_left;
3075 2611
    using ArcLookUp<G>::_head;
3076 2612

	
3077
    GRAPH_TYPEDEFS(typename G);
2613
    DIGRAPH_TYPEDEFS(typename G);
3078 2614
    typedef G Digraph;
3079 2615
    
3080 2616
    typename Digraph::template ArcMap<Arc> _next;
Ignore white space 6 line context
... ...
@@ -302,7 +302,7 @@
302 302
  public:
303 303

	
304 304
    typedef _Digraph Digraph;
305
    GRAPH_TYPEDEFS(typename Digraph);
305
    DIGRAPH_TYPEDEFS(typename Digraph);
306 306
    
307 307
  private:
308 308

	
Ignore white space 6 line context
... ...
@@ -237,7 +237,7 @@
237 237
  public:
238 238

	
239 239
    typedef _Digraph Digraph;
240
    GRAPH_TYPEDEFS(typename Digraph);
240
    DIGRAPH_TYPEDEFS(typename Digraph);
241 241
    
242 242
  private:
243 243

	
Ignore white space 6 line context
... ...
@@ -73,7 +73,7 @@
73 73
      : nodes(_g.nodes), arcs(_g.arcs) { }
74 74
    
75 75
    typedef True NodeNumTag;
76
    typedef True ArcNumTag;
76
    typedef True EdgeNumTag;
77 77

	
78 78
    int nodeNum() const { return nodes.size(); }
79 79
    int arcNum() const { return arcs.size(); }
Ignore white space 6 line context
... ...
@@ -3,6 +3,7 @@
3 3

	
4 4
noinst_HEADERS += \
5 5
	test/digraph_test.h \
6
	test/graph_utils_test.h \
6 7
	test/heap_test.h \
7 8
	test/map_test.h \
8 9
        test/test_tools.h
... ...
@@ -15,6 +16,7 @@
15 16
        test/dim_test \
16 17
	test/error_test \
17 18
	test/graph_test \
19
	test/graph_utils_test \
18 20
	test/kruskal_test \
19 21
        test/maps_test \
20 22
        test/random_test \
... ...
@@ -34,6 +36,7 @@
34 36
test_dim_test_SOURCES = test/dim_test.cc
35 37
test_error_test_SOURCES = test/error_test.cc
36 38
test_graph_test_SOURCES = test/graph_test.cc
39
test_graph_utils_test_SOURCES = test/graph_utils_test.cc
37 40
# test_heap_test_SOURCES = test/heap_test.cc
38 41
test_kruskal_test_SOURCES = test/kruskal_test.cc
39 42
test_maps_test_SOURCES = test/maps_test.cc
0 comments (0 inline)