26 #ifndef MLN_ACCU_TRANSFORM_STOP_HH
27 # define MLN_ACCU_TRANSFORM_STOP_HH
34 # include <mln/core/concept/meta_accumulator.hh>
35 # include <mln/core/concept/image.hh>
36 # include <mln/core/concept/window.hh>
37 # include <mln/extension/adjust.hh>
46 template <
typename I,
typename A,
typename W>
47 mln_ch_value(I, mln_result(A))
48 transform_stop(const Image<I>& input, const Accumulator<A>& a, const Window<W>& win);
50 template <typename I, typename A, typename W>
51 mln_ch_value(I, mln_meta_accu_result(A, mln_value(I)))
52 transform_stop(const Image<I>& input, const Meta_Accumulator<A>& a, const Window<W>& win);
56 # ifndef MLN_INCLUDE_ONLY
67 template <
typename I,
typename A,
typename W>
68 mln_ch_value(I, mln_result(A))
70 const Accumulator<A>& a_,
71 const Window<W>& win_)
73 mln_trace(
"accu::impl::generic::transform_stop");
75 const I& input =
exact(input_);
76 const W& win =
exact(win_);
79 mln_precondition(input.is_valid());
80 mln_precondition(win.is_valid());
84 mln_ch_value(I, mln_result(A)) output;
87 mln_piter(I)
p(input.domain());
88 mln_qiter(W) q(win,
p);
92 for_all(q) if (input.has(q))
98 output(p) = a.to_result();
109 template <
typename I,
typename A,
typename W>
110 mln_ch_value(I, mln_result(A))
111 transform_stop_fastest(const Image<I>& input_, const Accumulator<A>& a_, const Window<W>& win_)
113 mln_trace(
"accu::impl::transform_stop_fastest");
115 const I& input =
exact(input_);
116 const W& win =
exact(win_);
119 mln_precondition(input.is_valid());
120 mln_precondition(win.is_valid());
124 typedef mln_ch_value(I, mln_result(A)) O;
127 mln_pixter(O)
o(output);
129 mln_pixter(const I) p(input);
130 mln_qixter(const I, W) q(p, win);
140 o.val() = a.to_result();
155 template <
typename I,
typename A,
typename W>
156 mln_ch_value(I, mln_result(A))
157 transform_stop_dispatch(metal::false_,
158 const Image<I>& input, const Accumulator<A>& a, const Window<W>& win)
163 template <
typename I,
typename A,
typename W>
164 mln_ch_value(I, mln_result(A))
165 transform_stop_dispatch(metal::true_,
166 const Image<I>& input, const Accumulator<A>& a, const Window<W>& win)
168 return impl::transform_stop_fastest(input, a, win);
171 template <
typename I,
typename A,
typename W>
172 mln_ch_value(I, mln_result(A))
173 transform_stop_dispatch(const Image<I>& input, const Accumulator<A>& a, const Window<W>& win)
175 return transform_stop_dispatch(mln_is_fastest_IW(I, W)(),
184 template <
typename I,
typename A,
typename W>
186 mln_ch_value(I, mln_result(A))
187 transform_stop(const Image<I>& input, const Accumulator<A>& a, const Window<W>& win)
189 mln_trace(
"accu::transform_stop");
191 mln_precondition(
exact(input).is_valid());
192 mln_precondition(
exact(win).is_valid());
194 mln_ch_value(I, mln_result(A)) output;
195 output = internal::transform_stop_dispatch(input, a, win);
200 template <typename I, typename A, typename W>
201 mln_ch_value(I, mln_meta_accu_result(A, mln_value(I)))
202 transform_stop(const Image<I>& input, const Meta_Accumulator<A>& a, const Window<W>& win)
204 mln_trace(
"accu::transform_stop");
206 mln_precondition(
exact(input).is_valid());
207 mln_precondition(
exact(win).is_valid());
209 typedef mln_accu_with(A, mln_value(I)) A_;
212 mln_ch_value(I, mln_result(A_)) output;
213 output = internal::transform_stop_dispatch(input, a_, win);
218 # endif // ! MLN_INCLUDE_ONLY
225 #endif // ! MLN_ACCU_TRANSFORM_STOP_HH