26 #ifndef MLN_CORE_INTERNAL_CLASSICAL_WINDOW_BASE_HH
27 # define MLN_CORE_INTERNAL_CLASSICAL_WINDOW_BASE_HH
39 # include <mln/core/window.hh>
40 # include <mln/core/dpsites_piter.hh>
53 template <
typename D,
typename E>
54 class classical_window_base :
public window_base<D, E>
60 typedef window<D> regular;
64 typedef dpsites_fwd_piter<E> fwd_qiter;
67 typedef dpsites_fwd_piter<E> bkd_qiter;
70 typedef fwd_qiter qiter;
74 unsigned size()
const;
77 bool is_empty()
const;
81 bool is_centered()
const;
84 bool is_symmetric()
const;
92 unsigned delta()
const;
96 bool has(
const D& dp)
const;
99 const D& dp(
unsigned i)
const;
102 const std::vector<D>& vect()
const;
105 const std::vector<D>& std_vector()
const;
108 void print(std::ostream& ostr)
const;
112 classical_window_base();
114 void insert(
const D& d);
115 unsigned delta_()
const;
116 void print_(std::ostream& ostr)
const;
123 # ifndef MLN_INCLUDE_ONLY
125 template <
typename D,
typename E>
127 classical_window_base<D,E>::classical_window_base()
131 template <
typename D,
typename E>
134 classical_window_base<D,E>::size()
const
139 template <
typename D,
typename E>
142 classical_window_base<D,E>::is_empty()
const
144 return win_.is_empty();
147 template <
typename D,
typename E>
150 classical_window_base<D,E>::is_centered()
const
152 mln_invariant(win_.is_centered());
156 template <
typename D,
typename E>
159 classical_window_base<D,E>::is_symmetric()
const
161 mln_invariant(win_.is_symmetric());
165 template <
typename D,
typename E>
168 classical_window_base<D,E>::sym()
170 mln_invariant(win_.is_symmetric());
174 template <
typename D,
typename E>
177 classical_window_base<D,E>::delta()
const
182 return exact(
this)->delta_();
185 template <
typename D,
typename E>
188 classical_window_base<D,E>::delta_()
const
193 template <
typename D,
typename E>
196 classical_window_base<D,E>::dp(
unsigned i)
const
198 mln_precondition(i < size());
202 template <
typename D,
typename E>
204 const std::vector<D>&
205 classical_window_base<D,E>::std_vector()
const
207 return win_.std_vector();
210 template <
typename D,
typename E>
212 const std::vector<D>&
213 classical_window_base<D,E>::vect()
const
218 template <
typename D,
typename E>
221 classical_window_base<D,E>::has(
const D& dp)
const
226 template <
typename D,
typename E>
229 classical_window_base<D,E>::insert(
const D& d)
234 template <
typename D,
typename E>
237 classical_window_base<D,E>::print(std::ostream& ostr)
const
239 exact(
this)->print_(ostr);
242 template <
typename D,
typename E>
245 classical_window_base<D,E>::print_(std::ostream& ostr)
const
250 # endif // ! MLN_INCLUDE_ONLY
257 #endif // ! MLN_CORE_INTERNAL_CLASSICAL_WINDOW_BASE_HH