27 #ifndef MLN_CORE_CONCEPT_SITE_ITERATOR_HH
28 # define MLN_CORE_CONCEPT_SITE_ITERATOR_HH
37 # include <mln/core/concept/site_proxy.hh>
38 # include <mln/core/concept/iterator.hh>
88 # ifndef MLN_INCLUDE_ONLY
95 mln_precondition(is_valid());
104 E *
const this_ =
const_cast<E*const
>(
exact(
this));
105 if (this_->target_() == 0)
107 return exact(
this)->is_valid_();
110 template <
typename E>
115 if (
exact(
this)->target_() == 0)
117 exact(
this)->invalidate_();
118 mln_postcondition(is_valid() ==
false);
121 template <
typename E>
126 mln_precondition(
exact(
this)->target_() != 0);
127 exact(
this)->start_();
130 template <
typename E>
134 bool m0 = (& E::target_) == (& E::target_);
136 bool (E::*m1)()
const = & E::is_valid_;
138 void (E::*m2)() = & E::invalidate_;
140 void (E::*m3)() = & E::start_;
142 void (E::*m4)() = & E::next_;
144 bool m5 = (& E::change_target) == (& E::change_target);
148 # endif // ! MLN_INCLUDE_ONLY
153 #endif // ! MLN_CORE_CONCEPT_SITE_ITERATOR_HH