27 #ifndef MLN_DATA_MEMSET__HH
28 # define MLN_DATA_MEMSET__HH
36 # include <mln/core/concept/image.hh>
37 # include <mln/core/pixel.hh>
38 # include <mln/metal/is_not_const.hh>
39 # include <mln/opt/element.hh>
60 void memset_(Generalized_Pixel<P>& pix,
61 const mln_value(P)& v, std::size_t n);
76 void memset_(I& input,
const mln_psite(I)&
p,
77 const mln_value(I)& v, std::size_t n);
80 # ifndef MLN_INCLUDE_ONLY
87 void memset__(P& pix,
const mln_value(P)& v, std::size_t n)
89 mln_trace(
"data::impl::memset_");
91 typedef mln_image(P) I;
103 if (
sizeof(mln_value(I)) == 1)
113 std::memcpy(&c, &v, 1);
114 std::memset((
void*)(& pix.val()), c, n);
118 mln_value(I)* ptr = & pix.val();
119 for (std::size_t i = 0; i < n; ++i)
128 template <
typename P>
130 void memset_(Generalized_Pixel<P>& pix_,
131 const mln_value(P)& v, std::size_t n)
133 mln_trace(
"data::memset_");
135 typedef mln_image(P) I;
136 metal::is_not_const<I>::check();
138 P& pix = mln::internal::force_exact<P>(pix_);
139 mln_precondition(pix.ima().is_valid());
140 mln_precondition(& pix.val() >= & pix.ima()[0]);
141 mln_precondition(& pix.val() < & pix.ima()[0] +
142 opt::nelements(pix.ima()));
143 mln_precondition(& pix.val() + n <= & pix.ima()[0] +
144 opt::nelements(pix.ima()));
146 impl::memset__(pix, v, n);
150 template <typename I>
152 void memset_(I& input, const mln_psite(I)& p,
153 const mln_value(I)& v, std::
size_t n)
155 mln_trace(
"data::memset_");
157 mlc_is(mln_trait_image_speed(I), trait::image::speed::fastest)::check();
159 mln_precondition(input.is_valid());
160 mln_precondition(input.has(p));
161 mln_precondition(input.offset_of_point(p) + n <=
opt::nelements(input));
163 pixel<I> pix(input, p);
164 impl::memset__(pix, v, n);
168 # endif // ! MLN_INCLUDE_ONLY
175 #endif // ! MLN_DATA_MEMSET__HH