26 #ifndef MLN_UTIL_INTERNAL_GRAPH_ITER_HH
27 # define MLN_UTIL_INTERNAL_GRAPH_ITER_HH
33 # include <mln/util/internal/graph_iter_base.hh>
34 # include <mln/util/vertex.hh>
35 # include <mln/util/edge.hh>
48 class vertex_fwd_iterator
49 :
public graph_iter_base<G, util::vertex<G>, vertex_fwd_iterator<G> >
51 typedef graph_iter_base<G, util::vertex<G>, vertex_fwd_iterator<G> > super_;
56 vertex_fwd_iterator();
57 vertex_fwd_iterator(
const G& g);
69 friend class graph_iter_base<G, util::vertex<G>, vertex_fwd_iterator<G> >;
76 class vertex_bkd_iterator
77 :
public graph_iter_base<G, util::vertex<G>, vertex_bkd_iterator<G> >
79 typedef graph_iter_base<G, util::vertex<G>, vertex_bkd_iterator<G> > super_;
84 vertex_bkd_iterator();
85 vertex_bkd_iterator(
const G& g);
97 friend class graph_iter_base<G, util::vertex<G>, vertex_bkd_iterator<G> >;
103 template <typename G>
104 class edge_fwd_iterator
105 :
public graph_iter_base<G, util::edge<G>, edge_fwd_iterator<G> >
107 typedef graph_iter_base<G, util::edge<G>, edge_fwd_iterator<G> > super_;
113 edge_fwd_iterator(
const G& g);
119 util::edge_id_t start_id_()
const;
123 util::edge_id_t next_id_()
const;
125 friend class graph_iter_base<G, util::
edge<G>, edge_fwd_iterator<G> >;
131 template <typename G>
132 class edge_bkd_iterator
133 :
public graph_iter_base<G, util::edge<G>, edge_bkd_iterator<G> >
135 typedef graph_iter_base<G, util::edge<G>, edge_bkd_iterator<G> > super_;
141 edge_bkd_iterator(
const G& g);
147 util::edge_id_t start_id_()
const;
151 util::edge_id_t next_id_()
const;
153 friend class graph_iter_base<G, util::
edge<G>, edge_bkd_iterator<G> >;
159 # ifndef MLN_INCLUDE_ONLY
166 template <typename G>
168 vertex_fwd_iterator<G>::vertex_fwd_iterator()
172 template <
typename G>
174 vertex_fwd_iterator<G>::vertex_fwd_iterator(
const G& g)
179 template <
typename G>
182 vertex_fwd_iterator<G>::start_id_()
const
187 template <
typename G>
190 vertex_fwd_iterator<G>::next_id_()
const
192 return this->p_.id().value() + 1;
201 template <
typename G>
203 vertex_bkd_iterator<G>::vertex_bkd_iterator()
207 template <
typename G>
209 vertex_bkd_iterator<G>::vertex_bkd_iterator(
const G& g)
214 template <
typename G>
217 vertex_bkd_iterator<G>::start_id_()
const
219 return this->p_.graph().v_nmax() - 1;
222 template <
typename G>
225 vertex_bkd_iterator<G>::next_id_()
const
227 return this->p_.id().value() - 1;
236 template <
typename G>
238 edge_fwd_iterator<G>::edge_fwd_iterator()
242 template <
typename G>
244 edge_fwd_iterator<G>::edge_fwd_iterator(
const G& g)
249 template <
typename G>
252 edge_fwd_iterator<G>::start_id_()
const
257 template <
typename G>
260 edge_fwd_iterator<G>::next_id_()
const
262 return this->p_.id().value() + 1;
271 template <
typename G>
273 edge_bkd_iterator<G>::edge_bkd_iterator()
277 template <
typename G>
279 edge_bkd_iterator<G>::edge_bkd_iterator(
const G& g)
284 template <
typename G>
287 edge_bkd_iterator<G>::start_id_()
const
289 return this->p_.graph().e_nmax() - 1;
292 template <
typename G>
295 edge_bkd_iterator<G>::next_id_()
const
297 return this->p_.id().value() - 1;
300 # endif // ! MLN_INCLUDE_ONLY
307 #endif // ! MLN_UTIL_INTERNAL_GRAPH_ITER_HH