Changeset 449:91fcb8ed4cdc in lemon-1.2 for lemon
- Timestamp:
- 12/12/08 22:59:17 (16 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
lemon/adaptors.h
r448 r449 818 818 819 819 820 template <typename _Graph, typename NodeFilterMap,821 typename EdgeFilterMap, bool _checked = true>820 template <typename _Graph, typename _NodeFilterMap, 821 typename _EdgeFilterMap, bool _checked = true> 822 822 class SubGraphBase : public GraphAdaptorBase<_Graph> { 823 823 public: 824 824 typedef _Graph Graph; 825 typedef _NodeFilterMap NodeFilterMap; 826 typedef _EdgeFilterMap EdgeFilterMap; 827 825 828 typedef SubGraphBase Adaptor; 826 829 typedef GraphAdaptorBase<_Graph> Parent; … … 1049 1052 }; 1050 1053 1051 template <typename _Graph, typename NodeFilterMap, typenameEdgeFilterMap>1052 class SubGraphBase<_Graph, NodeFilterMap,EdgeFilterMap, false>1054 template <typename _Graph, typename _NodeFilterMap, typename _EdgeFilterMap> 1055 class SubGraphBase<_Graph, _NodeFilterMap, _EdgeFilterMap, false> 1053 1056 : public GraphAdaptorBase<_Graph> { 1054 1057 public: 1055 1058 typedef _Graph Graph; 1059 typedef _NodeFilterMap NodeFilterMap; 1060 typedef _EdgeFilterMap EdgeFilterMap; 1061 1056 1062 typedef SubGraphBase Adaptor; 1057 1063 typedef GraphAdaptorBase<_Graph> Parent; … … 1858 1864 1859 1865 typedef NodeNumTagIndicator<Digraph> NodeNumTag; 1860 int nodeNum() const { return 2 * _digraph->arcNum(); }1866 int nodeNum() const { return _digraph->nodeNum(); } 1861 1867 1862 1868 typedef ArcNumTagIndicator<Digraph> ArcNumTag; … … 1893 1899 arc = _digraph->findArc(t, s); 1894 1900 if (arc != INVALID) return arc; 1895 } else if (_digraph->s (p) == s) {1901 } else if (_digraph->source(p) == s) { 1896 1902 Edge arc = _digraph->findArc(s, t, p); 1897 1903 if (arc != INVALID) return arc; … … 1922 1928 typedef _Value Value; 1923 1929 typedef Arc Key; 1930 typedef typename MapTraits<MapImpl>::ConstReturnValue ConstReturnValue; 1931 typedef typename MapTraits<MapImpl>::ReturnValue ReturnValue; 1932 typedef typename MapTraits<MapImpl>::ConstReturnValue ConstReference; 1933 typedef typename MapTraits<MapImpl>::ReturnValue Reference; 1924 1934 1925 1935 ArcMapBase(const Adaptor& adaptor) : … … 1937 1947 } 1938 1948 1939 typename MapTraits<MapImpl>::ConstReturnValue 1940 operator[](const Arc& a) const { 1949 ConstReturnValue operator[](const Arc& a) const { 1941 1950 if (direction(a)) { 1942 1951 return _forward[a]; … … 1946 1955 } 1947 1956 1948 typename MapTraits<MapImpl>::ReturnValue 1949 operator[](const Arc& a) { 1957 ReturnValue operator[](const Arc& a) { 1950 1958 if (direction(a)) { 1951 1959 return _forward[a]; … … 1997 2005 typedef SubMapExtender<Adaptor, ArcMapBase<Value> > Parent; 1998 2006 1999 ArcMap(const Adaptor& adaptor)2007 explicit ArcMap(const Adaptor& adaptor) 2000 2008 : Parent(adaptor) {} 2001 2009 … … 2043 2051 typedef typename ItemSetTraits<Digraph, Node>::ItemNotifier NodeNotifier; 2044 2052 NodeNotifier& notifier(Node) const { return _digraph->notifier(Node()); } 2053 2054 typedef typename ItemSetTraits<Digraph, Edge>::ItemNotifier EdgeNotifier; 2055 EdgeNotifier& notifier(Edge) const { return _digraph->notifier(Edge()); } 2045 2056 2046 2057 protected: … … 2100 2111 typedef typename ForwardMap::Value Value; 2101 2112 typedef typename Parent::Arc Key; 2113 2114 typedef typename MapTraits<ForwardMap>::ReturnValue ReturnValue; 2115 typedef typename MapTraits<ForwardMap>::ConstReturnValue ConstReturnValue; 2116 typedef typename MapTraits<ForwardMap>::ReturnValue Reference; 2117 typedef typename MapTraits<ForwardMap>::ConstReturnValue ConstReference; 2102 2118 2103 2119 /// \brief Constructor … … 2122 2138 /// 2123 2139 /// Returns the value associated with a key. 2124 typename MapTraits<ForwardMap>::ConstReturnValue 2125 operator[](const Key& e) const { 2140 ConstReturnValue operator[](const Key& e) const { 2126 2141 if (Parent::direction(e)) { 2127 2142 return (*_forward)[e]; … … 2134 2149 /// 2135 2150 /// Returns the value associated with a key. 2136 typename MapTraits<ForwardMap>::ReturnValue 2137 operator[](const Key& e) { 2151 ReturnValue operator[](const Key& e) { 2138 2152 if (Parent::direction(e)) { 2139 2153 return (*_forward)[e]; … … 2247 2261 Arc findArc(const Node& u, const Node& v, 2248 2262 const Arc& prev = INVALID) const { 2249 Arc arc = prev; 2250 bool d = arc == INVALID ? true : (*_direction)[arc]; 2251 if (d) { 2263 Arc arc = _graph->findEdge(u, v, prev); 2264 while (arc != INVALID && source(arc) != u) { 2252 2265 arc = _graph->findEdge(u, v, arc); 2253 while (arc != INVALID && !(*_direction)[arc]) {2254 _graph->findEdge(u, v, arc);2255 }2256 if (arc != INVALID) return arc;2257 }2258 _graph->findEdge(v, u, arc);2259 while (arc != INVALID && (*_direction)[arc]) {2260 _graph->findEdge(u, v, arc);2261 2266 } 2262 2267 return arc; … … 2268 2273 2269 2274 Arc addArc(const Node& u, const Node& v) { 2270 Arc arc = _graph->add Arc(u, v);2271 _direction->set(arc, _graph-> source(arc) == u);2275 Arc arc = _graph->addEdge(u, v); 2276 _direction->set(arc, _graph->u(arc) == u); 2272 2277 return arc; 2273 2278 } … … 2913 2918 Arc findArc(const Node& u, const Node& v, 2914 2919 const Arc& prev = INVALID) const { 2915 if (inNode(u)) { 2916 if (outNode(v)) { 2917 if (static_cast<const DigraphNode&>(u) == 2918 static_cast<const DigraphNode&>(v) && prev == INVALID) { 2919 return Arc(u); 2920 } 2920 if (inNode(u) && outNode(v)) { 2921 if (static_cast<const DigraphNode&>(u) == 2922 static_cast<const DigraphNode&>(v) && prev == INVALID) { 2923 return Arc(u); 2921 2924 } 2922 } else { 2923 if (inNode(v)) { 2924 return Arc(::lemon::findArc(*_digraph, u, v, prev)); 2925 } 2925 } 2926 else if (outNode(u) && inNode(v)) { 2927 return Arc(::lemon::findArc(*_digraph, u, v, prev)); 2926 2928 } 2927 2929 return INVALID; … … 2937 2939 typedef Node Key; 2938 2940 typedef _Value Value; 2941 typedef typename MapTraits<NodeImpl>::ReferenceMapTag ReferenceMapTag; 2942 typedef typename MapTraits<NodeImpl>::ReturnValue ReturnValue; 2943 typedef typename MapTraits<NodeImpl>::ConstReturnValue ConstReturnValue; 2944 typedef typename MapTraits<NodeImpl>::ReturnValue Reference; 2945 typedef typename MapTraits<NodeImpl>::ConstReturnValue ConstReference; 2939 2946 2940 2947 NodeMapBase(const Adaptor& adaptor) … … 2949 2956 } 2950 2957 2951 typename MapTraits<NodeImpl>::ReturnValue 2952 operator[](const Node& key) { 2958 ReturnValue operator[](const Node& key) { 2953 2959 if (Adaptor::inNode(key)) { return _in_map[key]; } 2954 2960 else { return _out_map[key]; } 2955 2961 } 2956 2962 2957 typename MapTraits<NodeImpl>::ConstReturnValue 2958 operator[](const Node& key) const { 2963 ConstReturnValue operator[](const Node& key) const { 2959 2964 if (Adaptor::inNode(key)) { return _in_map[key]; } 2960 2965 else { return _out_map[key]; } … … 2973 2978 typedef Arc Key; 2974 2979 typedef _Value Value; 2980 typedef typename MapTraits<ArcImpl>::ReferenceMapTag ReferenceMapTag; 2981 typedef typename MapTraits<ArcImpl>::ReturnValue ReturnValue; 2982 typedef typename MapTraits<ArcImpl>::ConstReturnValue ConstReturnValue; 2983 typedef typename MapTraits<ArcImpl>::ReturnValue Reference; 2984 typedef typename MapTraits<ArcImpl>::ConstReturnValue ConstReference; 2975 2985 2976 2986 ArcMapBase(const Adaptor& adaptor) … … 2988 2998 } 2989 2999 2990 typename MapTraits<ArcImpl>::ReturnValue 2991 operator[](const Arc& key) { 3000 ReturnValue operator[](const Arc& key) { 2992 3001 if (Adaptor::origArc(key)) { 2993 3002 return _arc_map[key._item.first()]; … … 2997 3006 } 2998 3007 2999 typename MapTraits<ArcImpl>::ConstReturnValue 3000 operator[](const Arc& key) const { 3008 ConstReturnValue operator[](const Arc& key) const { 3001 3009 if (Adaptor::origArc(key)) { 3002 3010 return _arc_map[key._item.first()]; … … 3185 3193 typedef typename InNodeMap::Value Value; 3186 3194 3195 typedef typename MapTraits<InNodeMap>::ReferenceMapTag ReferenceMapTag; 3196 typedef typename MapTraits<InNodeMap>::ReturnValue ReturnValue; 3197 typedef typename MapTraits<InNodeMap>::ConstReturnValue ConstReturnValue; 3198 typedef typename MapTraits<InNodeMap>::ReturnValue Reference; 3199 typedef typename MapTraits<InNodeMap>::ConstReturnValue ConstReference; 3200 3187 3201 /// \brief Constructor 3188 3202 /// … … 3271 3285 typedef typename DigraphArcMap::Value Value; 3272 3286 3287 typedef typename MapTraits<DigraphArcMap>::ReferenceMapTag 3288 ReferenceMapTag; 3289 typedef typename MapTraits<DigraphArcMap>::ReturnValue 3290 ReturnValue; 3291 typedef typename MapTraits<DigraphArcMap>::ConstReturnValue 3292 ConstReturnValue; 3293 typedef typename MapTraits<DigraphArcMap>::ReturnValue 3294 Reference; 3295 typedef typename MapTraits<DigraphArcMap>::ConstReturnValue 3296 ConstReference; 3297 3273 3298 /// \brief Constructor 3274 3299 ///
Note: See TracChangeset
for help on using the changeset viewer.