26 #ifndef MLN_DATA_TRANSFORM_HH
27 # define MLN_DATA_TRANSFORM_HH
37 # include <mln/core/concept/image.hh>
38 # include <mln/core/concept/function.hh>
39 # include <mln/value/set.hh>
42 # include <mln/data/transform.spe.hh>
60 template <
typename I,
typename F>
61 mln_ch_value(I, mln_result(F))
62 transform(const Image<I>& input, const Function_v2v<F>& f);
74 template <typename I1, typename I2, typename F>
75 mln_ch_value(I1, mln_result(F))
77 const Image<I2>& input2,
78 const Function_vv2v<F>& f);
82 # ifndef MLN_INCLUDE_ONLY
87 template <
typename I,
typename F>
88 void transform_tests(
const Image<I>& input,
89 const Function_v2v<F>& f)
92 mln_precondition(exact(input).is_valid());
100 template <
typename I1,
typename I2,
typename F>
101 void transform_tests(
const Image<I1>& input1,
const Image<I2>& input2,
102 const Function_vv2v<F>& f)
105 mln_precondition(exact(input1).is_valid());
106 mln_precondition(exact(input2).is_valid());
107 mln_precondition(exact(input2).domain() == exact(input1).domain());
135 template <
typename I,
typename F>
136 mln_ch_value(I, mln_result(F))
139 trace::entering(
"data::impl::generic::transform");
141 const I& input = exact(input_);
142 const F& f = exact(f_);
144 data::internal::transform_tests(input, f);
146 mln_ch_value(I, mln_result(F)) output;
149 mln_piter(I) p(input.domain());
151 output(p) = f(input(p));
153 trace::exiting(
"data::impl::generic::transform");
164 template <
typename I1,
typename I2,
typename F>
165 mln_ch_value(I1, mln_result(F))
167 const
Image<I2>& input2_,
170 trace::entering(
"data::impl::generic::transform");
172 const I1& input1 = exact(input1_);
173 const I2& input2 = exact(input2_);
174 const F& f = exact(f_);
176 data::internal::transform_tests(input1, input2, f);
178 mln_ch_value(I1, mln_result(F)) output;
181 mln_piter(I1) p(input1.domain());
183 output(p) = f(input1(p), input2(p));
185 trace::exiting(
"data::impl::generic::transform");
199 template <
typename I,
typename F>
201 mln_ch_value(I, mln_result(F))
204 trace::entering(
"data::transform");
206 internal::transform_tests(input, f);
208 mln_ch_value(I, mln_result(F)) output;
209 output = internal::transform_dispatch(input, f);
211 trace::exiting(
"data::transform");
216 template <
typename I1,
typename I2,
typename F>
218 mln_ch_value(I1, mln_result(F))
222 trace::entering(
"data::transform");
224 internal::transform_tests(input1, input2, f);
226 mln_ch_value(I1, mln_result(F)) output;
227 output = internal::transform_dispatch(input1, input2, f);
229 trace::exiting(
"data::transform");
234 # endif // ! MLN_INCLUDE_ONLY
241 #endif // ! MLN_DATA_TRANSFORM_HH