26 #ifndef MLN_CORE_INTERNAL_PITER_ADAPTOR_HH
27 # define MLN_CORE_INTERNAL_PITER_ADAPTOR_HH
38 # include <mln/core/internal/site_iterator_base.hh>
52 template <
typename Pi,
typename S,
typename E>
53 class piter_adaptor_ :
public internal::site_iterator_base< S, E >
61 piter_adaptor_(
const Pi& piter);
64 bool is_valid_()
const;
76 const mln_psite(S)& p_hook_()
const;
79 void change_target(
const S& s);
83 void pi_change_target_(
const S& s);
92 # ifndef MLN_INCLUDE_ONLY
94 template <
typename Pi,
typename S,
typename E>
96 piter_adaptor_<Pi,S,E>::piter_adaptor_()
100 template <
typename Pi,
typename S,
typename E>
102 piter_adaptor_<Pi,S,E>::piter_adaptor_(
const Pi& pi)
108 template <
typename Pi,
typename S,
typename E>
111 piter_adaptor_<Pi,S,E>::is_valid_()
const
113 return pi_.is_valid();
116 template <
typename Pi,
typename S,
typename E>
119 piter_adaptor_<Pi,S,E>::invalidate_()
124 template <
typename Pi,
typename S,
typename E>
127 piter_adaptor_<Pi,S,E>::start_()
132 template <
typename Pi,
typename S,
typename E>
135 piter_adaptor_<Pi,S,E>::next_()
140 template <
typename Pi,
typename S,
typename E>
143 piter_adaptor_<Pi,S,E>::p_hook_()
const
145 return pi_.p_hook_();
148 template <
typename Pi,
typename S,
typename E>
151 piter_adaptor_<Pi,S,E>::change_target(
const S& s)
156 exact(
this)->pi_change_target_(s);
161 template <
typename Pi,
typename S,
typename E>
164 piter_adaptor_<Pi,S,E>::pi_change_target_(
const S& s)
166 this->pi_.change_target(s);
169 # endif // ! MLN_INCLUDE_ONLY
176 #endif // ! MLN_CORE_INTERNAL_PITER_ADAPTOR_HH