26 #ifndef MLN_UTIL_INTERNAL_GRAPH_ITER_BASE_HH
27 # define MLN_UTIL_INTERNAL_GRAPH_ITER_BASE_HH
36 # include <mln/core/concept/iterator.hh>
37 # include <mln/core/concept/proxy.hh>
46 template <
typename G,
typename Elt,
typename E>
49 public internal::proxy_impl< const Elt&, E >
66 typename Elt::id_t
id()
const;
69 operator typename Elt::id_t()
const;
73 operator typename Elt::id_value_t()
const;
76 operator const Elt&()
const;
93 # ifndef MLN_INCLUDE_ONLY
95 template <
typename G,
typename Elt,
typename E>
103 template <
typename G,
typename Elt,
typename E>
106 graph_iter_base<G, Elt, E>::is_valid()
const
108 return p_.is_valid();
111 template <
typename G,
typename Elt,
typename E>
114 graph_iter_base<G, Elt, E>::invalidate()
117 mln_postcondition(! is_valid());
120 template <
typename G,
typename Elt,
typename E>
123 graph_iter_base<G, Elt, E>::start()
125 p_.update_id(
exact(
this)->start_id_());
128 template <
typename G,
typename Elt,
typename E>
131 graph_iter_base<G, Elt, E>::next()
133 mln_precondition(is_valid());
134 p_.update_id(
exact(
this)->next_id_());
137 template <
typename G,
typename Elt,
typename E>
140 graph_iter_base<G, Elt, E>::id()
const
145 template <
typename G,
typename Elt,
typename E>
147 graph_iter_base<G, Elt, E>::operator
typename Elt::id_t()
const
152 template <
typename G,
typename Elt,
typename E>
154 graph_iter_base<G, Elt, E>::operator
typename Elt::id_value_t()
const
159 template <
typename G,
typename Elt,
typename E>
161 graph_iter_base<G, Elt, E>::operator
const Elt&()
const
166 template <
typename G,
typename Elt,
typename E>
169 graph_iter_base<G, Elt, E>::subj_()
174 template <
typename G,
typename Elt,
typename E>
177 graph_iter_base<G, Elt, E>::p_hook_()
const
182 # endif // ! MLN_INCLUDE_ONLY
188 #endif // ! MLN_UTIL_INTERNAL_GRAPH_ITER_BASE_HH