equal
deleted
inserted
replaced
392 Parent::OutEdgeIt out; |
392 Parent::OutEdgeIt out; |
393 Parent::InEdgeIt in; |
393 Parent::InEdgeIt in; |
394 public: |
394 public: |
395 OutEdgeIt() {} |
395 OutEdgeIt() {} |
396 OutEdgeIt(const SymSmartGraph& g, Edge e) { |
396 OutEdgeIt(const SymSmartGraph& g, Edge e) { |
397 if (e.id & 1 == 0) { |
397 if ((e.id & 1) == 0) { |
398 out = Parent::OutEdgeIt(g, SymEdge(e)); |
398 out = Parent::OutEdgeIt(g, SymEdge(e)); |
399 in = Parent::InEdgeIt(g, g.tail(e)); |
399 in = Parent::InEdgeIt(g, g.tail(e)); |
400 } else { |
400 } else { |
401 out = Parent::OutEdgeIt(INVALID); |
401 out = Parent::OutEdgeIt(INVALID); |
402 in = Parent::InEdgeIt(g, SymEdge(e)); |
402 in = Parent::InEdgeIt(g, SymEdge(e)); |
429 Parent::OutEdgeIt out; |
429 Parent::OutEdgeIt out; |
430 Parent::InEdgeIt in; |
430 Parent::InEdgeIt in; |
431 public: |
431 public: |
432 InEdgeIt() {} |
432 InEdgeIt() {} |
433 InEdgeIt(const SymSmartGraph& g, Edge e) { |
433 InEdgeIt(const SymSmartGraph& g, Edge e) { |
434 if (e.id & 1 == 0) { |
434 if ((e.id & 1) == 0) { |
435 out = Parent::OutEdgeIt(g, SymEdge(e)); |
435 out = Parent::OutEdgeIt(g, SymEdge(e)); |
436 in = Parent::InEdgeIt(g, g.tail(e)); |
436 in = Parent::InEdgeIt(g, g.tail(e)); |
437 } else { |
437 } else { |
438 out = Parent::OutEdgeIt(INVALID); |
438 out = Parent::OutEdgeIt(INVALID); |
439 in = Parent::InEdgeIt(g, SymEdge(e)); |
439 in = Parent::InEdgeIt(g, SymEdge(e)); |
538 ///\sa id(SymEdge) |
538 ///\sa id(SymEdge) |
539 int maxSymEdgeId() const { return Parent::maxEdgeId(); } |
539 int maxSymEdgeId() const { return Parent::maxEdgeId(); } |
540 |
540 |
541 |
541 |
542 Node tail(Edge e) const { |
542 Node tail(Edge e) const { |
543 return e.id & 1 == 0 ? |
543 return (e.id & 1) == 0 ? |
544 Parent::tail(SymEdge(e)) : Parent::head(SymEdge(e)); |
544 Parent::tail(SymEdge(e)) : Parent::head(SymEdge(e)); |
545 } |
545 } |
546 |
546 |
547 Node head(Edge e) const { |
547 Node head(Edge e) const { |
548 return e.id & 1 == 0 ? |
548 return (e.id & 1) == 0 ? |
549 Parent::head(SymEdge(e)) : Parent::tail(SymEdge(e)); |
549 Parent::head(SymEdge(e)) : Parent::tail(SymEdge(e)); |
550 } |
550 } |
551 |
551 |
552 Node tail(SymEdge e) const { |
552 Node tail(SymEdge e) const { |
553 return Parent::tail(e); |
553 return Parent::tail(e); |
628 if (se != INVALID) return backward(se); |
628 if (se != INVALID) return backward(se); |
629 } |
629 } |
630 return INVALID; |
630 return INVALID; |
631 } |
631 } |
632 |
632 |
633 /// Finds an symmetric edge between two nodes. |
633 // /// Finds an symmetric edge between two nodes. |
634 |
634 |
635 /// Finds an symmetric edge from node \c u to node \c v. |
635 // /// Finds an symmetric edge from node \c u to node \c v. |
636 /// |
636 // /// |
637 /// If \c prev is \ref INVALID (this is the default value), then |
637 // /// If \c prev is \ref INVALID (this is the default value), then |
638 /// It finds the first edge from \c u to \c v. Otherwise it looks for |
638 // /// It finds the first edge from \c u to \c v. Otherwise it looks for |
639 /// the next edge from \c u to \c v after \c prev. |
639 // /// the next edge from \c u to \c v after \c prev. |
640 /// \return The found edge or INVALID if there is no such an edge. |
640 // /// \return The found edge or INVALID if there is no such an edge. |
641 |
641 |
642 // SymEdge findEdge(Node u, Node v, SymEdge prev = INVALID) |
642 // SymEdge findEdge(Node u, Node v, SymEdge prev = INVALID) |
643 // { |
643 // { |
644 // if (prev == INVALID || id(prev) & 1 == 0) { |
644 // if (prev == INVALID || id(prev) & 1 == 0) { |
645 // SymEdge se = Parent::findEdge(u, v, SymEdge(prev)); |
645 // SymEdge se = Parent::findEdge(u, v, SymEdge(prev)); |
665 static Edge forward(SymEdge e) { |
665 static Edge forward(SymEdge e) { |
666 return Edge(id(e) << 1); |
666 return Edge(id(e) << 1); |
667 } |
667 } |
668 |
668 |
669 static Edge backward(SymEdge e) { |
669 static Edge backward(SymEdge e) { |
670 return Edge((id(e) << 1) & 1); |
670 return Edge((id(e) << 1) | 1); |
671 } |
671 } |
672 |
672 |
673 }; |
673 }; |
674 ///Graph for bidirectional edges. |
674 ///Graph for bidirectional edges. |
675 |
675 |