27 #ifndef MLN_DATA_TRANSFORM_HH
28 # define MLN_DATA_TRANSFORM_HH
38 # include <mln/core/concept/image.hh>
39 # include <mln/core/concept/function.hh>
40 # include <mln/value/set.hh>
43 # include <mln/data/transform.spe.hh>
62 template <
typename I,
typename F>
63 mln_ch_value(I, mln_result(F))
64 transform(const Image<I>& input, const Function_v2v<F>& f);
78 template <typename I1, typename I2, typename F>
79 mln_ch_value(I1, mln_result(F))
81 const Image<I2>& input2,
82 const Function_vv2v<F>& f);
86 # ifndef MLN_INCLUDE_ONLY
91 template <
typename I,
typename F>
92 void transform_tests(
const Image<I>& input,
93 const Function_v2v<F>& f)
96 mln_precondition(
exact(input).is_valid());
104 template <
typename I1,
typename I2,
typename F>
105 void transform_tests(
const Image<I1>& input1,
const Image<I2>& input2,
106 const Function_vv2v<F>& f)
109 mln_precondition(
exact(input1).is_valid());
110 mln_precondition(
exact(input2).is_valid());
139 template <
typename I,
typename F>
140 mln_ch_value(I, mln_result(F))
141 transform(const Image<I>& input_, const Function_v2v<F>& f_)
143 mln_trace(
"data::impl::generic::transform");
145 const I& input =
exact(input_);
146 const F& f =
exact(f_);
148 data::internal::transform_tests(input, f);
150 mln_ch_value(I, mln_result(F)) output;
153 mln_piter(I)
p(input.domain());
155 output(
p) = f(input(
p));
167 template <typename I1, typename I2, typename F>
168 mln_ch_value(I1, mln_result(F))
170 const Image<I2>& input2_,
171 const Function_vv2v<F>& f_)
173 mln_trace(
"data::impl::generic::transform");
175 const I1& input1 =
exact(input1_);
176 const I2& input2 =
exact(input2_);
177 const F& f =
exact(f_);
179 data::internal::transform_tests(input1, input2, f);
181 mln_ch_value(I1, mln_result(F)) output;
184 mln_piter(I1) p(input1.domain());
186 output(p) = f(input1(p), input2(p));
201 template <typename I, typename F>
203 mln_ch_value(I, mln_result(F))
204 transform(const Image<I>& input, const Function_v2v<F>& f)
206 mln_trace(
"data::transform");
208 internal::transform_tests(input, f);
210 mln_ch_value(I, mln_result(F)) output;
211 output = internal::transform_dispatch(input, f);
217 template <typename I1, typename I2, typename F>
219 mln_ch_value(I1, mln_result(F))
220 transform(const Image<I1>& input1, const Image<I2>& input2,
221 const Function_vv2v<F>& f)
223 mln_trace(
"data::transform");
225 internal::transform_tests(input1, input2, f);
227 mln_ch_value(I1, mln_result(F)) output;
228 output = internal::transform_dispatch(input1, input2, f);
234 # endif // ! MLN_INCLUDE_ONLY
241 #endif // ! MLN_DATA_TRANSFORM_HH