27 #ifndef MLN_DATA_PASTE_WITHOUT_LOCALIZATION_HH
28 # define MLN_DATA_PASTE_WITHOUT_LOCALIZATION_HH
35 # include <mln/core/concept/image.hh>
36 # include <mln/core/box_runstart_piter.hh>
38 # include <mln/border/get.hh>
53 template <
typename I,
typename J>
58 # ifndef MLN_INCLUDE_ONLY
67 template <
typename I,
typename J>
69 void paste_without_localization_tests(
const Image<I>& input,
72 mlc_converts_to(mln_value(I), mln_value(J))::check();
91 template <
typename I,
typename J>
96 trace::entering(
"data::impl::generic::paste_without_localization");
98 internal::paste_without_localization_tests(input_, output_);
100 const I& input = exact(input_);
101 J& output = exact(output_);
103 mln_fwd_piter(I) pi(input.domain());
105 mln_fwd_piter(J) po(output.domain());
107 while (pi.is_valid() && po.is_valid())
109 output(po) = input(pi);
114 trace::exiting(
"data::impl::generic::paste_without_localization");
140 template <
typename I,
typename J>
145 trace::entering(
"data::impl::paste_without_localization_fastest");
147 internal::paste_without_localization_tests(input_, output_);
149 const I& input = exact(input_);
150 J& output = exact(output_);
152 typedef mln_value(I) V;
153 memcpy(output.buffer(), input.buffer(), input.nelements() *
sizeof(V));
155 trace::exiting(
"data::impl::paste_without_localization_fastest");
177 template <
typename I,
typename J>
182 trace::entering(
"data::impl::paste_without_localization_fastest");
184 internal::paste_without_localization_tests(input_, output_);
186 const I& input = exact(input_);
187 J& output = exact(output_);
192 typedef mln_value(I) V;
195 memcpy(&output(po), &input(pi), input.ncols() *
sizeof(V));
197 trace::exiting(
"data::impl::paste_without_localization_fastest");
218 template <
typename I,
typename J>
223 trace::entering(
"data::impl::paste_without_localization_fast");
225 internal::paste_without_localization_tests(input_, output_);
227 const I& input = exact(input_);
228 J& output = exact(output_);
230 mln_pixter(
const I) pi(input);
231 mln_pixter(J) po(output);
236 trace::exiting(
"data::impl::paste_without_localization_fast");
250 template <
typename I,
typename J>
252 void paste_without_localization_dispatch(
253 mln::trait::image::value_access::direct,
254 mln::trait::image::value_access::direct,
255 mln::trait::image::ext_domain::some,
256 mln::trait::image::ext_domain::some,
260 if (
sizeof(mln_value(I)) ==
sizeof(mln_value(J)))
263 && input.domain() == output.domain())
274 template <
typename I,
typename J>
276 void paste_without_localization_dispatch(
277 mln::trait::image::value_access::any,
278 mln::trait::image::value_access::any,
279 mln::trait::image::ext_domain::any,
280 mln::trait::image::ext_domain::any,
284 impl::generic::paste_without_localization(input, output);
288 template <
typename I,
typename J>
290 void paste_without_localization_dispatch(
291 mln::trait::image::value_storage::any,
292 mln::trait::image::value_storage::any,
293 const Image<I>& input,
296 impl::generic::paste_without_localization(input, output);
300 template <
typename I,
typename J>
302 void paste_without_localization_dispatch(
303 mln::trait::image::value_storage::one_block,
304 mln::trait::image::value_storage::one_block,
305 const Image<I>& input_,
308 const I& input = exact(input_);
309 J& output = exact(output_);
313 if (mlc_is(mln_trait_image_value_alignment(I),
314 trait::image::value_alignment::with_grid)::value &&
315 mlc_is(mln_trait_image_value_alignment(J),
316 trait::image::value_alignment::with_grid)::value)
318 paste_without_localization_dispatch(
319 mln_trait_image_value_access(I)(),
320 mln_trait_image_value_access(J)(),
321 mln_trait_image_ext_domain(I)(),
322 mln_trait_image_ext_domain(J)(),
326 impl::generic::paste_without_localization(input, output);
330 template <
typename I,
typename J>
332 void paste_without_localization_dispatch(
const Image<I>& input,
335 paste_without_localization_dispatch(mln_trait_image_value_storage(I)(),
336 mln_trait_image_value_storage(J)(),
347 template <
typename I,
typename J>
351 trace::entering(
"data::paste_without_localization");
353 internal::paste_without_localization_tests(input, output);
355 internal::paste_without_localization_dispatch(input, output);
357 trace::exiting(
"data::paste_without_localization");
360 # endif // ! MLN_INCLUDE_ONLY
368 #endif // ! MLN_DATA_PASTE_WITHOUT_LOCALIZATION_HH