27 #ifndef MLN_CORE_IMAGE_DMORPH_IMAGE_IF_HH
28 # define MLN_CORE_IMAGE_DMORPH_IMAGE_IF_HH
35 # include <mln/core/internal/image_domain_morpher.hh>
36 # include <mln/core/site_set/p_if.hh>
37 # include <mln/pw/all.hh>
38 # include <mln/convert/to_fun.hh>
45 template <
typename I,
typename F>
struct image_if;
54 template <
typename I,
typename F>
55 struct data< image_if<I,F> >
57 data(I& ima,
const F& f);
60 p_if<mln_domain(I), F> domain_;
69 template <
typename I,
typename F>
70 struct image_< image_if<I,F> > : default_image_morpher< I,
74 typedef trait::image::category::domain_morpher
category;
76 typedef trait::image::ext_domain::none
ext_domain;
77 typedef trait::image::ext_value::irrelevant
ext_value;
78 typedef trait::image::ext_io::irrelevant
ext_io;
80 typedef trait::image::vw_io::none
vw_io;
81 typedef trait::image::vw_set::none
vw_set;
95 template <
typename I,
typename F>
97 p_if<mln_domain(I), F>,
110 void init_(I& ima,
const F& f);
130 template <
typename I,
typename F>
137 template <
typename I,
typename F>
143 template <
typename I,
typename A>
147 template <
typename I,
typename A>
153 # ifndef MLN_INCLUDE_ONLY
157 template <
typename I,
typename F>
160 f = model.
domain().predicate();
163 template <
typename I,
typename F,
typename J>
164 void init_(tag::image_t, image_if<I,F>& target,
const J& model)
170 target.init_(ima, f);
178 template <
typename I,
typename F>
191 template <
typename I,
typename F>
193 image_if<I,F>::image_if()
197 template <
typename I,
typename F>
199 image_if<I,F>::image_if(I& ima,
const F& f)
204 template <
typename I,
typename F>
207 image_if<I,F>::init_(I& ima,
const F& f)
209 mln_precondition(! this->is_valid());
210 this->data_ =
new internal::data< image_if<I,F> >(ima, f);
213 template <
typename I,
typename F>
215 const p_if<mln_domain(I), F>&
216 image_if<I,F>::domain()
const
218 mln_precondition(this->is_valid());
219 return this->data_->domain_;
222 template <
typename I,
typename F>
224 image_if<I,F>::operator image_if<const I,F>()
const
226 mln_precondition(this->is_valid());
227 image_if<const I,F> tmp(this->data_->ima_,
228 this->data_->domain_.predicate());
235 template <
typename I,
typename F>
238 operator | (Image<I>& ima,
const Function_v2b<F>& f)
244 template <
typename I,
typename F>
247 operator | (
const Image<I>& ima,
const Function_v2b<F>& f)
249 image_if<const I, F> tmp(
exact(ima),
exact(f));
254 template <
typename I,
typename A>
255 image_if< const I, fun::C<bool(*)(A)> >
256 operator | (
const Image<I>& ima,
bool (*f)(A) )
258 return exact(ima) | convert::to_fun(f);
261 template <
typename I,
typename A>
262 image_if< I, fun::C<bool(*)(A)> >
265 return exact(ima) | convert::to_fun(f);
269 # endif // ! MLN_INCLUDE_ONLY
274 #endif // ! MLN_CORE_IMAGE_DMORPH_IMAGE_IF_HH