26 #ifndef MLN_ACCU_IMAGE_TAKE_AS_INIT_HH
27 # define MLN_ACCU_IMAGE_TAKE_AS_INIT_HH
33 # include <mln/core/concept/accumulator.hh>
34 # include <mln/core/concept/image.hh>
35 # include <mln/border/resize_equal.hh>
51 template <
typename I,
typename J>
57 # ifndef MLN_INCLUDE_ONLY
64 template <
typename I,
typename J>
67 take_as_init_tests(Image<I>& input_,
const Image<J>& values_)
69 I& input =
exact(input_);
70 const J& values =
exact(values_);
72 mln_precondition(input.is_valid());
73 mln_precondition(values.is_valid());
75 mln_precondition(values.domain() <= input.domain());
96 mln_trace(
"accu::impl::image::generic::take_as_init");
98 mlc_is_a(mln_value(I), Accumulator)::check();
100 I& input =
exact(input_);
101 mln_precondition(input.is_valid());
103 mln_piter(I)
p(input.domain());
109 template <typename I, typename J>
113 mln_trace(
"accu::impl::image::generic::take_as_init");
115 typedef mln_value(I) A;
116 mlc_is_a(A, Accumulator)::check();
117 mlc_converts_to(mln_value(J), mln_argument(A))::check();
119 I& input =
exact(input_);
120 const J& values =
exact(values_);
122 internal::take_as_init_tests(input, values);
124 mln_piter(J)
p(values.domain());
135 template <typename I>
137 take_as_init_fastest(Image<I>& input_, const mln_deduce(I,
value, argument)& v)
139 mln_trace(
"accu::impl::image::take_as_init_fastest");
141 mlc_is_a(mln_value(I), Accumulator)::check();
143 I& input =
exact(input_);
144 mln_precondition(input.is_valid());
146 mln_pixter(I) px(input);
152 template <typename I, typename J>
154 take_as_init_fastest(Image<I>& input_, const Image<J>& values_)
156 mln_trace(
"accu::impl::image::take_as_init_fastest");
158 typedef mln_value(I) A;
159 mlc_is_a(A, Accumulator)::check();
160 mlc_converts_to(mln_value(J), mln_argument(A))::check();
162 I& input =
exact(input_);
163 const J& values =
exact(values_);
165 internal::take_as_init_tests(input, values);
167 mln_precondition(values.domain() == input.domain());
171 mln_pixter(I) p_in(input);
172 mln_pixter(const J) p_v(values);
189 template <
typename I,
typename V>
192 take_as_init_dispatch(trait::image::speed::any,
193 Image<I>& input,
const V& v)
198 template <
typename I,
typename V>
201 take_as_init_dispatch(trait::image::speed::fastest,
202 Image<I>& input,
const V& v)
204 impl::take_as_init_fastest(input, v);
207 template <
typename I,
typename V>
210 take_as_init_dispatch(Image<I>& input,
const V& v)
212 take_as_init_dispatch(mln_trait_image_speed(I)(),
218 template <
typename I,
typename J>
221 take_as_init_dispatch(trait::image::speed::any,
222 trait::image::speed::any,
223 Image<I>& input,
const Image<J>& values)
228 template <
typename I,
typename J>
231 take_as_init_dispatch(trait::image::speed::fastest,
232 trait::image::speed::fastest,
233 Image<I>& input,
const Image<J>& values)
235 if (
exact(values).domain() ==
exact(input).domain())
236 impl::take_as_init_fastest(input, values);
241 template <
typename I,
typename J>
244 take_as_init_dispatch(Image<I>& input,
245 const Image<J>& values)
247 take_as_init_dispatch(mln_trait_image_speed(I)(),
248 mln_trait_image_speed(J)(),
257 template <
typename I>
260 take_as_init(Image<I>& input,
const mln_deduce(I, value, argument)& v)
262 mln_trace(
"accu::image::take_as_init");
264 mlc_is_a(mln_value(I), Accumulator)::check();
266 mln_precondition(
exact(input).is_valid());
267 internal::take_as_init_dispatch(input, v);
271 template <
typename I,
typename J>
276 mln_trace(
"accu::image::take_as_init");
278 typedef mln_value(I) A;
279 mlc_is_a(A, Accumulator)::check();
280 mlc_converts_to(mln_value(J), mln_argument(A))::check();
282 internal::take_as_init_tests(input, values);
283 internal::take_as_init_dispatch(input, values);
287 # endif // ! MLN_INCLUDE_ONLY
296 #endif // ! MLN_ACCU_IMAGE_TAKE_AS_INIT_HH