27 #ifndef MLN_EXTENSION_FILL_HH
28 # define MLN_EXTENSION_FILL_HH
37 # include <mln/core/concept/image.hh>
38 # include <mln/trait/image/props.hh>
39 # include <mln/border/fill.hh>
40 # include <mln/data/fill_with_value.hh>
62 void fill(
const Image<I>& ima,
const mln_value(I)& val);
65 # ifndef MLN_INCLUDE_ONLY
74 void do_fill(I& ima,
const mln_value(I)& val);
77 void do_fill(mln::trait::image::ext_domain::some,
78 mln::trait::image::ext_value::single,
79 mln::trait::image::ext_domain::none,
80 I& ima,
const mln_value(I)& val)
82 ima.change_extension(val);
86 void do_fill(mln::trait::image::ext_domain::some,
87 mln::trait::image::ext_value::multiple,
88 mln::trait::image::ext_domain::none,
89 I& ima,
const mln_value(I)& val)
92 ima.change_extension(val);
96 void do_fill(mln::trait::image::ext_domain::some,
97 mln::trait::image::ext_value::any,
98 mln::trait::image::ext_domain::some,
99 I& ima,
const mln_value(I)& val)
104 template <
typename I>
105 void do_fill(mln::trait::image::ext_domain::none,
106 mln::trait::image::ext_value::any,
107 mln::trait::image::ext_domain::any,
108 I& ima,
const mln_value(I)& val)
115 template <
typename I>
116 void do_fill(I& ima,
const mln_value(I)& val)
118 typedef typename I::delegatee D;
119 do_fill(mln_trait_image_ext_domain(I)(),
120 mln_trait_image_ext_value(I)(),
121 mln_trait_image_ext_domain(D)(),
129 template <
typename I>
130 void fill_dispatch(mln::trait::image::ext_domain::none,
131 mln::trait::image::ext_io::any,
132 I& ,
const mln_value(I)& )
137 template <
typename I>
138 void fill_dispatch(mln::trait::image::ext_domain::some,
139 mln::trait::image::ext_io::read_only,
140 I& ima,
const mln_value(I)& val)
146 template <
typename I>
147 void fill_dispatch(mln::trait::image::ext_domain::extendable,
148 mln::trait::image::ext_io::read_write,
149 I& ima,
const mln_value(I)& val)
155 template <
typename I>
156 void fill_dispatch(mln::trait::image::ext_domain::some,
157 mln::trait::image::ext_io::read_write,
158 I& ima,
const mln_value(I)& val)
163 template <
typename I>
164 void fill_dispatch(
const Image<I>& ima_,
const mln_value(I)& val)
166 I& ima =
const_cast<I&
>(
exact(ima_));
167 fill_dispatch(mln_trait_image_ext_domain(I)(),
168 mln_trait_image_ext_io(I)(),
177 template <
typename I>
178 void fill(
const Image<I>& ima,
const mln_value(I)& val)
180 mln_trace(
"extension::fill");
182 mln_precondition(
exact(ima).is_valid());
183 internal::fill_dispatch(ima, val);
187 # endif // ! MLN_INCLUDE_ONLY
194 #endif // ! MLN_EXTENSION_FILL_HH