27 #ifndef MLN_DATA_FILL_HH
28 # define MLN_DATA_FILL_HH
36 # include <mln/core/concept/function.hh>
37 # include <mln/pw/image.hh>
38 # include <mln/convert/to_fun.hh>
40 # include <mln/data/fill_with_image.hh>
41 # include <mln/data/fill_with_value.hh>
57 template <
typename I,
typename D>
58 void fill(Image<I>& ima,
const D&
data);
62 # ifndef MLN_INCLUDE_ONLY
69 template <
typename I,
typename D>
71 void fill_tests(Image<I>& ima,
const D&)
77 mlc_is(mln_trait_image_value_io(I), trait::image::value_io::read_write)::check();
78 mln_precondition(exact(ima).is_valid());
85 void fill_dispatch_overload(I& ima,
const mln_value(I)& v)
90 template <
typename I,
typename J>
91 void fill_dispatch_overload(I& ima,
const Image<J>&
data)
96 template <
typename I,
typename F>
97 void fill_dispatch_overload(I& ima,
const Function<F>& f)
99 mlc_converts_to(mln_result(F), mln_value(I))::check();
101 exact(f) | ima.domain());
104 template <
typename I,
typename R,
typename A>
105 void fill_dispatch_overload(I& ima, R (*f)(A))
107 mlc_converts_to(R, mln_value(I))::check();
112 template <
typename I,
typename V,
unsigned N>
113 void fill_dispatch_overload(I& ima, V (&arr)[N])
115 mlc_converts_to(V, mln_value(I))::check();
116 mln_precondition(N == ima.nsites());
117 mln_fwd_piter(I) p(ima.domain());
125 template <typename I, typename D>
126 void fill_dispatch(Image<I>& ima, const D&
data)
128 fill_dispatch_overload(exact(ima), exact(data));
136 template <
typename I,
typename D>
140 trace::entering(
"data::fill");
142 internal::fill_tests(ima, data);
143 internal::fill_dispatch(ima, data);
145 trace::exiting(
"data::fill");
149 # endif // ! MLN_INCLUDE_ONLY
156 #endif // ! MLN_DATA_FILL_HH