155 return *this; |
155 return *this; |
156 } |
156 } |
157 |
157 |
158 }; |
158 }; |
159 |
159 |
160 class UndirIncEdgeIt : public UndirEdge { |
160 class IncEdgeIt : public UndirEdge { |
161 const Graph* graph; |
161 const Graph* graph; |
162 bool forward; |
162 bool forward; |
163 friend class IterableUndirGraphExtender; |
163 friend class IterableUndirGraphExtender; |
164 template <typename G> |
164 template <typename G> |
165 friend class UndirGraphExtender; |
165 friend class UndirGraphExtender; |
166 public: |
166 public: |
167 |
167 |
168 UndirIncEdgeIt() { } |
168 IncEdgeIt() { } |
169 |
169 |
170 UndirIncEdgeIt(Invalid i) : UndirEdge(i), forward(false) { } |
170 IncEdgeIt(Invalid i) : UndirEdge(i), forward(false) { } |
171 |
171 |
172 explicit UndirIncEdgeIt(const Graph& _graph, const Node &n) |
172 explicit IncEdgeIt(const Graph& _graph, const Node &n) |
173 : graph(&_graph) |
173 : graph(&_graph) |
174 { |
174 { |
175 _graph._dirFirstOut(*this, n); |
175 _graph._dirFirstOut(*this, n); |
176 } |
176 } |
177 |
177 |
178 // FIXME: Do we need this type of constructor here? |
178 // FIXME: Do we need this type of constructor here? |
179 // UndirIncEdgeIt(const Graph& _graph, const Edge& e) : |
179 // IncEdgeIt(const Graph& _graph, const Edge& e) : |
180 // UndirEdge(e), graph(&_graph), forward(_graph.forward(e)) { } |
180 // UndirEdge(e), graph(&_graph), forward(_graph.forward(e)) { } |
181 // or |
181 // or |
182 // UndirIncEdgeIt(const Graph& _graph, const Node& n, |
182 // IncEdgeIt(const Graph& _graph, const Node& n, |
183 // Const UndirEdge &e) ... ? |
183 // Const UndirEdge &e) ... ? |
184 |
184 |
185 UndirIncEdgeIt& operator++() { |
185 IncEdgeIt& operator++() { |
186 graph->_dirNextOut(*this); |
186 graph->_dirNextOut(*this); |
187 return *this; |
187 return *this; |
188 } |
188 } |
189 }; |
189 }; |
190 |
190 |
191 Node source(const UndirIncEdgeIt &e) const { |
191 Node source(const IncEdgeIt &e) const { |
192 return _dirSource(e); |
192 return _dirSource(e); |
193 } |
193 } |
194 |
194 |
195 /// \todo Shouldn't the "source" of an undirected edge be called "aNode" |
195 /// \todo Shouldn't the "source" of an undirected edge be called "aNode" |
196 /// or something??? |
196 /// or something??? |
197 using Parent::source; |
197 using Parent::source; |
198 |
198 |
199 /// Target of the given Edge. |
199 /// Target of the given Edge. |
200 Node target(const UndirIncEdgeIt &e) const { |
200 Node target(const IncEdgeIt &e) const { |
201 return _dirTarget(e); |
201 return _dirTarget(e); |
202 } |
202 } |
203 |
203 |
204 /// \todo Shouldn't the "target" of an undirected edge be called "bNode" |
204 /// \todo Shouldn't the "target" of an undirected edge be called "bNode" |
205 /// or something??? |
205 /// or something??? |