27 #ifndef MLN_FUN_SPE_UNARY_HH
28 # define MLN_FUN_SPE_UNARY_HH
30 # include <mln/core/concept/function.hh>
31 # include <mln/trait/next/solve.hh>
32 # include <mln/trait/functions.hh>
44 template <
typename Fun,
typename T>
59 return (*f_)(*
const_cast<const T*
>(x_));
81 template <
typename Fun>
96 return (*f_)(*
const_cast<const argument*
>(x_));
116 template <
typename Fun,
typename Any,
typename T>
131 return (*f_)(m_.to_result());
153 template <
typename Fun,
typename T>
159 template <
bool param,
bool set,
typename Fun,
typename T>
162 template <
typename Fun,
typename T>
166 typedef mln_trait_nunary(Fun,
T) def;
171 result operator () (const argument&
value)
const
173 return def::read(value);
176 template <
typename U>
184 template <
typename Fun,
typename T>
188 typedef typename super::def::lvalue
lvalue;
190 template <
typename U>
200 super::def::write(l, r);
203 using super::operator ();
210 template <
typename U>
218 return apply_rw(value);
222 template <
typename Fun,
typename T>
226 typedef mln_trait_nunary(Fun,
T) def;
231 typedef mln_trait_fun_param(
unary_impl) param;
234 result operator () (const argument&
value)
const
236 return def::read(this->state_, value);
239 template <
typename U>
259 template <
typename Fun,
typename T>
263 typedef typename super::def::lvalue
lvalue;
265 template <
typename U>
275 super::def::write(this->state(), l, r);
278 using super::operator ();
285 template <
typename U>
293 return apply_rw(value);
299 template <
typename Fun,
typename T>
301 : impl::unary_impl<mlc_or(mln_trait_fun_is_parametrable(mln_trait_nunary(Fun, T)), mln_trait_fun_is_parametrable(Fun))::value,
302 mln_trait_fun_is_assignable_(mln_trait_nunary(Fun, T))::value, Fun, T>
305 typedef impl::unary_impl<mlc_or(mln_trait_fun_is_parametrable(def), mln_trait_fun_is_parametrable(Fun))::
value,
306 mln_trait_fun_is_assignable_(def)::
value,
313 template <
typename U>
319 using super::operator();
328 template <
typename F,
typename T>
329 std::ostream& operator << (std::ostream& o, const mln::fun::spe::lwrapper<F, T>& m)
331 return o << m.to_result();
334 #endif // ! MLN_FUN_SPE_UNARY_HH