gravatar
kpeter (Peter Kovacs)
kpeter@inf.elte.hu
Various bug fixes and code improvements in adaptors.h (#67) - Fix UndirectorBase::nodeNum(). - Fix UndirectorBase::findEdge(). - Fix OrienterBase::addArc(). - Fix OrienterBase::findArc(). - Improve SplitNodesBase::findArc(). - Add missing notifier() function in UndirectorBase. - Add missing typedefs for maps (conform to the ReferenceMap concept). - Add some useful typedefs for graph adaptors.
0 1 0
default
1 file changed with 71 insertions and 46 deletions:
↑ Collapse diff ↑
Ignore white space 4 line context
... ...
@@ -818,9 +818,12 @@
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,9 +1052,12 @@
1049 1052
  };
1050 1053

	
1051
  template <typename _Graph, typename NodeFilterMap, typename EdgeFilterMap>
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,5 +1864,5 @@
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,5 +1899,5 @@
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,4 +1928,8 @@
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,6 +1947,5 @@
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,6 +1955,5 @@
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,5 +2005,5 @@
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

	
... ...
@@ -2044,4 +2052,7 @@
2044 2052
    NodeNotifier& notifier(Node) const { return _digraph->notifier(Node()); }
2045 2053

	
2054
    typedef typename ItemSetTraits<Digraph, Edge>::ItemNotifier EdgeNotifier;
2055
    EdgeNotifier& notifier(Edge) const { return _digraph->notifier(Edge()); }
2056

	
2046 2057
  protected:
2047 2058

	
... ...
@@ -2101,4 +2112,9 @@
2101 2112
      typedef typename Parent::Arc Key;
2102 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;
2118

	
2103 2119
      /// \brief Constructor
2104 2120
      ///
... ...
@@ -2122,6 +2138,5 @@
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,6 +2149,5 @@
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,16 +2261,7 @@
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,6 +2273,6 @@
2268 2273

	
2269 2274
    Arc addArc(const Node& u, const Node& v) {
2270
      Arc arc = _graph->addArc(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,15 +2918,12 @@
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,4 +2939,9 @@
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,12 +2956,10 @@
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,4 +2978,9 @@
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,6 +2998,5 @@
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,6 +3006,5 @@
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,4 +3193,10 @@
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,4 +3285,15 @@
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
      ///
0 comments (0 inline)