26 #ifndef MLN_ACCU_IMAGE_SET_VALUE_HH
27 # define MLN_ACCU_IMAGE_SET_VALUE_HH
33 # include <mln/core/concept/accumulator.hh>
34 # include <mln/core/concept/image.hh>
35 # include <mln/border/resize_equal.hh>
49 set_value(Image<I>& input,
const mln_deduce(I,
value, result)& res);
51 template <
typename I,
typename J>
53 set_value(Image<I>& input,
const Image<J>& res);
56 # ifndef MLN_INCLUDE_ONLY
64 template <
typename I,
typename J>
67 set_value_tests(Image<I>& input_,
const Image<J>& res_)
69 I& input =
exact(input_);
70 const J& res =
exact(res_);
72 mln_precondition(input.is_valid());
73 mln_precondition(res.is_valid());
75 mln_precondition(res.domain() <= input.domain());
96 set_value(Image<I>& input_,
const mln_deduce(I,
value, result)& res)
98 mln_trace(
"accu::impl::image::generic::set_value");
100 typedef mln_value(I) A;
101 mlc_is_a(A, Accumulator)::check();
102 mlc_equal(mln_trait_accumulator_has_set_value(A),
103 trait::accumulator::has_set_value::yes)::check();
105 I& input =
exact(input_);
106 mln_precondition(input.is_valid());
108 mln_piter(I)
p(input.domain());
114 template <typename I, typename J>
117 set_value(Image<I>& input_, const Image<J>& res_)
119 mln_trace(
"accu::impl::image::generic::set_value");
121 typedef mln_value(I) A;
122 mlc_is_a(A, Accumulator)::check();
123 mlc_equal(mln_trait_accumulator_has_set_value(A),
124 trait::accumulator::has_set_value::yes)::check();
125 mlc_converts_to(mln_value(J), mln_deduce(I,
value, result))::check();
127 I& input =
exact(input_);
128 const J& res =
exact(res_);
130 internal::set_value_tests(input, res);
132 mln_piter(J)
p(res.domain());
143 template <typename I>
146 set_value_fastest(Image<I>& input_, const mln_deduce(I, value, result)& res)
148 mln_trace(
"accu::impl::image::set_value_fastest");
150 typedef mln_value(I) A;
151 mlc_is_a(A, Accumulator)::check();
152 mlc_equal(mln_trait_accumulator_has_set_value(A),
153 trait::accumulator::has_set_value::yes)::check();
155 I& input =
exact(input_);
156 mln_precondition(input.is_valid());
158 mln_pixter(I) px(input);
164 template <typename I, typename J>
167 set_value_fastest(Image<I>& input_, const Image<J>& res_)
169 mln_trace(
"accu::impl::image::set_value_fastest");
171 typedef mln_value(I) A;
172 mlc_is_a(A, Accumulator)::check();
173 mlc_equal(mln_trait_accumulator_has_set_value(A),
174 trait::accumulator::has_set_value::yes)::check();
175 mlc_converts_to(mln_value(J), mln_deduce(I, value, result))::check();
177 I& input =
exact(input_);
178 const J& res =
exact(res_);
180 internal::set_value_tests(input, res);
181 mln_precondition(res.domain() == input.domain());
185 mln_pixter(I) p_in(input);
186 mln_pixter(const J) p_res(res);
187 for_all_2(p_in, p_res)
203 template <
typename I>
206 set_value_dispatch(trait::image::speed::any,
207 Image<I>& input,
const mln_deduce(I, value, result)& res)
212 template <
typename I>
214 set_value_dispatch(trait::image::speed::fastest,
215 Image<I>& input,
const mln_deduce(I, value, result)& res)
217 impl::set_value_fastest(input, res);
220 template <
typename I>
223 set_value_dispatch(Image<I>& input,
const mln_deduce(I, value, result)& res)
225 set_value_dispatch(mln_trait_image_speed(I)(),
231 template <
typename I,
typename J>
234 set_value_dispatch(trait::image::speed::any,
235 trait::image::speed::any,
236 Image<I>& input,
const Image<J>& res)
241 template <
typename I,
typename J>
244 set_value_dispatch(trait::image::speed::fastest,
245 trait::image::speed::fastest,
246 Image<I>& input,
const Image<J>& res)
248 if (
exact(res).domain() ==
exact(input).domain())
249 impl::set_value_fastest(input, res);
254 template <
typename I,
typename J>
257 set_value_dispatch(Image<I>& input,
const Image<J>& res)
259 set_value_dispatch(mln_trait_image_speed(I)(),
260 mln_trait_image_speed(J)(),
269 template <
typename I>
272 set_value(Image<I>& input,
const mln_deduce(I, value, result)& res)
274 mln_trace(
"accu::image::set_value");
276 typedef mln_value(I) A;
277 mlc_is_a(A, Accumulator)::check();
278 mlc_equal(mln_trait_accumulator_has_set_value(A),
279 trait::accumulator::has_set_value::yes)::check();
281 mln_precondition(
exact(input).is_valid());
282 internal::set_value_dispatch(input, res);
286 template <typename I, typename J>
289 set_value(Image<I>& input, const Image<J>& res)
291 mln_trace(
"accu::image::set_value");
293 typedef mln_value(I) A;
294 mlc_is_a(A, Accumulator)::check();
295 mlc_equal(mln_trait_accumulator_has_set_value(A),
296 trait::accumulator::has_set_value::yes)::check();
297 mlc_converts_to(mln_value(J), mln_deduce(I, value, result))::check();
299 internal::set_value_tests(input, res);
300 internal::set_value_dispatch(input, res);
304 # endif // ! MLN_INCLUDE_ONLY
313 #endif // ! MLN_ACCU_IMAGE_SET_VALUE_HH