26 #ifndef MLN_UTIL_INTERNAL_GRAPH_NBH_ITER_BASE_HH
27 # define MLN_UTIL_INTERNAL_GRAPH_NBH_ITER_BASE_HH
29 # include <mln/core/concept/proxy.hh>
39 template <
typename S>
class p_indexed_psite;
44 template <
typename G,
typename C,
typename Elt,
typename E>
47 public internal::proxy_impl< const Elt&, E >
66 unsigned index()
const;
69 typename Elt::id_t
id()
const;
72 operator typename Elt::id_t()
const;
76 operator typename Elt::id_value_t()
const;
85 template <
typename C2>
109 template <
typename C2>
118 # ifndef MLN_INCLUDE_ONLY
120 template <
typename G,
typename C,
typename Elt,
typename E>
126 template <
typename G,
typename C,
typename Elt,
typename E>
127 template <
typename C2>
130 : elt_(c.graph()), i_(0)
136 template <
typename G,
typename C,
typename Elt,
typename E>
139 nbh_iterator_base<G,C,Elt,E>::is_valid()
const
141 return exact(
this)->is_valid_();
144 template <
typename G,
typename C,
typename Elt,
typename E>
147 nbh_iterator_base<G,C,Elt,E>::invalidate()
149 i_ = mln_max(
unsigned);
152 template <
typename G,
typename C,
typename Elt,
typename E>
155 nbh_iterator_base<G,C,Elt,E>::start()
157 i_ =
exact(
this)->start_id_();
159 exact(
this)->update_();
162 template <
typename G,
typename C,
typename Elt,
typename E>
165 nbh_iterator_base<G,C,Elt,E>::next()
167 mln_precondition(is_valid());
168 mln_precondition(c_->is_valid());
170 i_ =
exact(
this)->next_id_();
172 exact(
this)->update_();
175 template <
typename G,
typename C,
typename Elt,
typename E>
178 nbh_iterator_base<G,C,Elt,E>::index()
const
183 template <
typename G,
typename C,
typename Elt,
typename E>
186 nbh_iterator_base<G,C,Elt,E>::id()
const
191 template <
typename G,
typename C,
typename Elt,
typename E>
193 nbh_iterator_base<G,C,Elt,E>::operator
typename Elt::id_t()
const
198 template <
typename G,
typename C,
typename Elt,
typename E>
200 nbh_iterator_base<G,C,Elt,E>::operator
typename Elt::id_value_t()
const
205 template <
typename G,
typename C,
typename Elt,
typename E>
208 nbh_iterator_base<G,C,Elt,E>::center()
const
210 mln_precondition(c_ != 0);
214 template <
typename G,
typename C,
typename Elt,
typename E>
217 nbh_iterator_base<G,C,Elt,E>::subj_()
222 template <
typename G,
typename C,
typename Elt,
typename E>
223 template <
typename S>
226 nbh_iterator_base<G,C,Elt,E>::center_at(
const p_indexed_psite<S>& c)
230 c_ = &
static_cast< const C&
>(c.unproxy_());
235 elt_.change_graph(c_->graph());
240 template <
typename G,
typename C,
typename Elt,
typename E>
241 template <
typename C2>
244 nbh_iterator_base<G,C,Elt,E>::center_at(
const C2& c)
246 mlc_converts_to(C2,
const C&)::check();
247 c_ = &
static_cast< const C&
>(
exact(c));
252 elt_.change_graph(c_->graph());
257 template <
typename G,
typename C,
typename Elt,
typename E>
260 nbh_iterator_base<G,C,Elt,E>::change_target(
const G& g)
262 elt_.change_graph(g);
265 template <
typename G,
typename C,
typename Elt,
typename E>
268 nbh_iterator_base<G,C,Elt,E>::element()
const
273 template <
typename G,
typename C,
typename Elt,
typename E>
276 nbh_iterator_base<G,C,Elt,E>::elt_hook_()
const
281 # endif // !MLN_INCLUDE_ONLY
288 #endif // ! MLN_UTIL_INTERNAL_GRAPH_NBH_ITER_BASE_HH