47 |
48 |
48 bool empty() const { |
49 bool empty() const { |
49 return predMap[target] != INVALID; |
50 return predMap[target] != INVALID; |
50 } |
51 } |
51 |
52 |
52 class RevIt { |
53 class RevEdgeIt { |
53 public: |
54 public: |
54 RevIt() {} |
55 RevEdgeIt() {} |
55 RevIt(Invalid) : path(0), current(INVALID) {} |
56 RevEdgeIt(Invalid) : path(0), current(INVALID) {} |
56 RevIt(const PredMapPath& _path) |
57 RevEdgeIt(const PredMapPath& _path) |
57 : path(&_path), current(_path.target) {} |
58 : path(&_path), current(_path.target) {} |
58 |
59 |
59 operator const typename Graph::Edge() const { |
60 operator const typename Graph::Edge() const { |
60 return path->predMap[current]; |
61 return path->predMap[current]; |
61 } |
62 } |
62 |
63 |
63 RevIt& operator++() { |
64 RevEdgeIt& operator++() { |
64 current = path->graph.source(path->predMap[current]); |
65 current = path->graph.source(path->predMap[current]); |
65 if (path->predMap[current] == INVALID) current = INVALID; |
66 if (path->predMap[current] == INVALID) current = INVALID; |
66 return *this; |
67 return *this; |
67 } |
68 } |
68 |
69 |
69 bool operator==(const RevIt& e) const { |
70 bool operator==(const RevEdgeIt& e) const { |
70 return current == e.current; |
71 return current == e.current; |
71 } |
72 } |
72 |
73 |
73 bool operator!=(const RevIt& e) const { |
74 bool operator!=(const RevEdgeIt& e) const { |
74 return current != e.current; |
75 return current != e.current; |
75 } |
76 } |
76 |
77 |
77 bool operator<(const RevIt& e) const { |
78 bool operator<(const RevEdgeIt& e) const { |
78 return current < e.current; |
79 return current < e.current; |
79 } |
80 } |
80 |
81 |
81 private: |
82 private: |
82 const PredMapPath* path; |
83 const PredMapPath* path; |
119 |
120 |
120 bool empty() const { |
121 bool empty() const { |
121 return source != target; |
122 return source != target; |
122 } |
123 } |
123 |
124 |
124 class RevIt { |
125 class RevEdgeIt { |
125 public: |
126 public: |
126 RevIt() {} |
127 RevEdgeIt() {} |
127 RevIt(Invalid) : path(0), current(INVALID) {} |
128 RevEdgeIt(Invalid) : path(0), current(INVALID) {} |
128 RevIt(const PredMatrixMapPath& _path) |
129 RevEdgeIt(const PredMatrixMapPath& _path) |
129 : path(&_path), current(_path.target) {} |
130 : path(&_path), current(_path.target) {} |
130 |
131 |
131 operator const typename Graph::Edge() const { |
132 operator const typename Graph::Edge() const { |
132 return path->predMatrixMap(path->source, current); |
133 return path->predMatrixMap(path->source, current); |
133 } |
134 } |
134 |
135 |
135 RevIt& operator++() { |
136 RevEdgeIt& operator++() { |
136 current = |
137 current = |
137 path->graph.source(path->predMatrixMap(path->source, current)); |
138 path->graph.source(path->predMatrixMap(path->source, current)); |
138 if (path->predMatrixMap(path->source, current) == INVALID) |
139 if (path->predMatrixMap(path->source, current) == INVALID) |
139 current = INVALID; |
140 current = INVALID; |
140 return *this; |
141 return *this; |
141 } |
142 } |
142 |
143 |
143 bool operator==(const RevIt& e) const { |
144 bool operator==(const RevEdgeIt& e) const { |
144 return current == e.current; |
145 return current == e.current; |
145 } |
146 } |
146 |
147 |
147 bool operator!=(const RevIt& e) const { |
148 bool operator!=(const RevEdgeIt& e) const { |
148 return current != e.current; |
149 return current != e.current; |
149 } |
150 } |
150 |
151 |
151 bool operator<(const RevIt& e) const { |
152 bool operator<(const RevEdgeIt& e) const { |
152 return current < e.current; |
153 return current < e.current; |
153 } |
154 } |
154 |
155 |
155 private: |
156 private: |
156 const PredMatrixMapPath* path; |
157 const PredMatrixMapPath* path; |