365 Edge fromId(int id, Edge) const { |
365 Edge fromId(int id, Edge) const { |
366 return Parent::edgeFromId(id); |
366 return Parent::edgeFromId(id); |
367 } |
367 } |
368 |
368 |
369 Node oppositeNode(const Node &n, const Edge &e) const { |
369 Node oppositeNode(const Node &n, const Edge &e) const { |
370 if( n == Parent::source(e)) |
370 if( n == Parent::u(e)) |
371 return Parent::target(e); |
371 return Parent::v(e); |
372 else if( n == Parent::target(e)) |
372 else if( n == Parent::v(e)) |
373 return Parent::source(e); |
373 return Parent::u(e); |
374 else |
374 else |
375 return INVALID; |
375 return INVALID; |
376 } |
376 } |
377 |
377 |
378 Arc oppositeArc(const Arc &arc) const { |
378 Arc oppositeArc(const Arc &arc) const { |
379 return Parent::direct(arc, !Parent::direction(arc)); |
379 return Parent::direct(arc, !Parent::direction(arc)); |
380 } |
380 } |
381 |
381 |
382 using Parent::direct; |
382 using Parent::direct; |
383 Arc direct(const Edge &edge, const Node &node) const { |
383 Arc direct(const Edge &edge, const Node &node) const { |
384 return Parent::direct(edge, Parent::source(edge) == node); |
384 return Parent::direct(edge, Parent::u(edge) == node); |
385 } |
385 } |
386 |
386 |
387 // Alterable extension |
387 // Alterable extension |
388 |
388 |
389 typedef AlterationNotifier<GraphExtender, Node> NodeNotifier; |
389 typedef AlterationNotifier<GraphExtender, Node> NodeNotifier; |
584 |
584 |
585 /// Base node of the iterator |
585 /// Base node of the iterator |
586 /// |
586 /// |
587 /// Returns the base node of the iterator |
587 /// Returns the base node of the iterator |
588 Node baseNode(const IncEdgeIt &edge) const { |
588 Node baseNode(const IncEdgeIt &edge) const { |
589 return edge._direction ? source(edge) : target(edge); |
589 return edge._direction ? u(edge) : v(edge); |
590 } |
590 } |
591 /// Running node of the iterator |
591 /// Running node of the iterator |
592 /// |
592 /// |
593 /// Returns the running node of the iterator |
593 /// Returns the running node of the iterator |
594 Node runningNode(const IncEdgeIt &edge) const { |
594 Node runningNode(const IncEdgeIt &edge) const { |
595 return edge._direction ? target(edge) : source(edge); |
595 return edge._direction ? v(edge) : u(edge); |
596 } |
596 } |
597 |
597 |
598 // Mappable extension |
598 // Mappable extension |
599 |
599 |
600 template <typename _Value> |
600 template <typename _Value> |