27 #ifndef MLN_CORE_ROUTINE_EXTEND_HH
28 # define MLN_CORE_ROUTINE_EXTEND_HH
38 # include <mln/core/image/dmorph/extension_ima.hh>
39 # include <mln/core/image/dmorph/extension_fun.hh>
40 # include <mln/core/image/dmorph/extension_val.hh>
42 # include <mln/trait/undef.hh>
45 # define mln_extension_type(I,J) \
46 typename mln::internal::extension_type<I,J>::result;
48 # define mln_extension_type_(I,J) \
49 mln::internal::extension_type<I,J>::result;
58 template <
typename I,
typename J,
typename B1,
typename B2>
59 struct extension_type_selector
61 typedef mln::trait::undef result;
65 template <
typename I,
typename J>
66 struct extension_type_selector<I,J,
67 metal::bool_<false>, metal::bool_<false> >
68 : mlc_converts_to(J, mln_value(I))::check_t
70 typedef extension_val<I> result;
74 template <
typename I,
typename J>
75 struct extension_type_selector<I,J,
76 metal::bool_<false>, metal::bool_<true> >
78 typedef extension_fun<I, J> result;
82 template <
typename I,
typename J>
83 struct extension_type_selector<I,J,
84 metal::bool_<true>, metal::bool_<false> >
86 typedef extension_ima<I, J> result;
90 template <
typename I,
typename J>
92 : extension_type_selector<I, J,
93 typename mlc_is_a(J,Image)::eval,
94 typename mlc_is_a(J,Function)::eval>
104 template <
typename I,
typename F>
105 extension_fun<const I, F>
106 extend(
const Image<I>& ima,
const Function_v2v<F>& fun);
108 template <
typename I,
typename F>
110 extend(Image<I>& ima,
const Function_v2v<F>& fun);
115 template <
typename I,
typename J>
116 extension_ima<const I, const J>
117 extend(
const Image<I>& ima,
const Image<J>& ext);
122 template <
typename I>
123 extension_val<const I>
124 extend(
const Image<I>& ima,
const mln_value(I)& val);
126 template <
typename I>
128 extend(Image<I>& ima,
const mln_value(I)& val);
132 # ifndef MLN_INCLUDE_ONLY
137 template <
typename I,
typename F>
139 extension_fun<const I, F>
142 mlc_converts_to(mln_result(F), mln_value(I))::check();
147 template <
typename I,
typename F>
150 extend(Image<I>& ima,
const Function_v2v<F>& fun)
152 mlc_converts_to(mln_result(F), mln_value(I))::check();
153 extension_fun<I, F> tmp(exact(ima), exact(fun));
160 template <
typename I,
typename J>
161 extension_ima<const I, const J>
164 mlc_converts_to(mln_value(J), mln_value(I))::check();
172 template <
typename I>
174 extension_val<const I>
181 template <
typename I>
184 extend(Image<I>& ima,
const mln_value(I)& val)
186 extension_val<I> tmp(exact(ima), val);
191 # endif // ! MLN_INCLUDE_ONLY
196 #endif // ! MLN_CORE_ROUTINE_EXTEND_HH