MCPcopy Create free account
hub / github.com/BirolLab/abyss / edge_iterator

Class edge_iterator

Graph/DirectedGraph.h:149–216  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

147
148/** Iterate through edges. */
149class edge_iterator
150 : public std::iterator<std::input_iterator_tag, edge_descriptor>
151{
152 void nextVertex()
153 {
154 vertex_iterator vlast = m_g->vertices().second;
155 for (; m_vit != vlast; ++m_vit) {
156 std::pair<adjacency_iterator, adjacency_iterator>
157 adj = m_g->adjacent_vertices(*m_vit);
158 if (adj.first != adj.second) {
159 m_eit = adj.first;
160 return;
161 }
162 }
163 // Set m_eit to a known value.
164 static const adjacency_iterator s_eitNULL;
165 m_eit = s_eitNULL;
166 }
167
168 public:
169 edge_iterator() { }
170 edge_iterator(const DirectedGraph* g, const vertex_iterator& vit)
171 : m_g(g), m_vit(vit)
172 {
173 nextVertex();
174 }
175
176 edge_descriptor operator*() const
177 {
178 return edge_descriptor(*m_vit, *m_eit);
179 }
180
181 const edge_property_type& get_property() const
182 {
183 return m_eit->get_property();
184 }
185
186 bool operator==(const edge_iterator& it) const
187 {
188 return m_vit == it.m_vit && m_eit == it.m_eit;
189 }
190
191 bool operator!=(const edge_iterator& it) const
192 {
193 return !(*this == it);
194 }
195
196 edge_iterator& operator++()
197 {
198 if (++m_eit == m_g->adjacent_vertices(*m_vit).second) {
199 ++m_vit;
200 nextVertex();
201 }
202 return *this;
203 }
204
205 edge_iterator operator++(int)
206 {

Callers 1

edgesMethod · 0.70

Calls 1

adjacent_verticesMethod · 0.45

Tested by

no test coverage detected