696 Parent::setEdgeFilterMap(_edge_filter_map); |
696 Parent::setEdgeFilterMap(_edge_filter_map); |
697 } |
697 } |
698 }; |
698 }; |
699 |
699 |
700 template <typename _Graph> |
700 template <typename _Graph> |
701 class UndirectGraphAdaptorBase : |
701 class UndirGraphAdaptorBase : |
702 public UGraphBaseExtender<GraphAdaptorBase<_Graph> > { |
702 public UGraphBaseExtender<GraphAdaptorBase<_Graph> > { |
703 public: |
703 public: |
704 typedef _Graph Graph; |
704 typedef _Graph Graph; |
705 typedef UGraphBaseExtender<GraphAdaptorBase<_Graph> > Parent; |
705 typedef UGraphBaseExtender<GraphAdaptorBase<_Graph> > Parent; |
706 protected: |
706 protected: |
707 UndirectGraphAdaptorBase() : Parent() { } |
707 UndirGraphAdaptorBase() : Parent() { } |
708 public: |
708 public: |
709 typedef typename Parent::UEdge UEdge; |
709 typedef typename Parent::UEdge UEdge; |
710 typedef typename Parent::Edge Edge; |
710 typedef typename Parent::Edge Edge; |
711 |
711 |
712 template <typename T> |
712 template <typename T> |
713 class EdgeMap { |
713 class EdgeMap { |
714 protected: |
714 protected: |
715 const UndirectGraphAdaptorBase<_Graph>* g; |
715 const UndirGraphAdaptorBase<_Graph>* g; |
716 template <typename TT> friend class EdgeMap; |
716 template <typename TT> friend class EdgeMap; |
717 typename _Graph::template EdgeMap<T> forward_map, backward_map; |
717 typename _Graph::template EdgeMap<T> forward_map, backward_map; |
718 public: |
718 public: |
719 typedef T Value; |
719 typedef T Value; |
720 typedef Edge Key; |
720 typedef Edge Key; |
721 |
721 |
722 EdgeMap(const UndirectGraphAdaptorBase<_Graph>& _g) : g(&_g), |
722 EdgeMap(const UndirGraphAdaptorBase<_Graph>& _g) : g(&_g), |
723 forward_map(*(g->graph)), backward_map(*(g->graph)) { } |
723 forward_map(*(g->graph)), backward_map(*(g->graph)) { } |
724 |
724 |
725 EdgeMap(const UndirectGraphAdaptorBase<_Graph>& _g, T a) : g(&_g), |
725 EdgeMap(const UndirGraphAdaptorBase<_Graph>& _g, T a) : g(&_g), |
726 forward_map(*(g->graph), a), backward_map(*(g->graph), a) { } |
726 forward_map(*(g->graph), a), backward_map(*(g->graph), a) { } |
727 |
727 |
728 void set(Edge e, T a) { |
728 void set(Edge e, T a) { |
729 if (g->direction(e)) |
729 if (g->direction(e)) |
730 forward_map.set(e, a); |
730 forward_map.set(e, a); |
746 typename _Graph::template EdgeMap<T> map; |
746 typename _Graph::template EdgeMap<T> map; |
747 public: |
747 public: |
748 typedef T Value; |
748 typedef T Value; |
749 typedef UEdge Key; |
749 typedef UEdge Key; |
750 |
750 |
751 UEdgeMap(const UndirectGraphAdaptorBase<_Graph>& g) : |
751 UEdgeMap(const UndirGraphAdaptorBase<_Graph>& g) : |
752 map(*(g.graph)) { } |
752 map(*(g.graph)) { } |
753 |
753 |
754 UEdgeMap(const UndirectGraphAdaptorBase<_Graph>& g, T a) : |
754 UEdgeMap(const UndirGraphAdaptorBase<_Graph>& g, T a) : |
755 map(*(g.graph), a) { } |
755 map(*(g.graph), a) { } |
756 |
756 |
757 void set(UEdge e, T a) { |
757 void set(UEdge e, T a) { |
758 map.set(e, a); |
758 map.set(e, a); |
759 } |
759 } |
771 /// Undocumented, untested!!! |
771 /// Undocumented, untested!!! |
772 /// If somebody knows nice demo application, let's polulate it. |
772 /// If somebody knows nice demo application, let's polulate it. |
773 /// |
773 /// |
774 /// \author Marton Makai |
774 /// \author Marton Makai |
775 template<typename _Graph> |
775 template<typename _Graph> |
776 class UndirectGraphAdaptor : |
776 class UndirGraphAdaptor : |
777 public UGraphAdaptorExtender< |
777 public UGraphAdaptorExtender< |
778 UndirectGraphAdaptorBase<_Graph> > { |
778 UndirGraphAdaptorBase<_Graph> > { |
779 public: |
779 public: |
780 typedef _Graph Graph; |
780 typedef _Graph Graph; |
781 typedef UGraphAdaptorExtender< |
781 typedef UGraphAdaptorExtender< |
782 UndirectGraphAdaptorBase<_Graph> > Parent; |
782 UndirGraphAdaptorBase<_Graph> > Parent; |
783 protected: |
783 protected: |
784 UndirectGraphAdaptor() { } |
784 UndirGraphAdaptor() { } |
785 public: |
785 public: |
786 UndirectGraphAdaptor(_Graph& _graph) { |
786 UndirGraphAdaptor(_Graph& _graph) { |
787 setGraph(_graph); |
787 setGraph(_graph); |
788 } |
788 } |
789 }; |
789 }; |
790 |
790 |
791 |
791 |