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???  |