26 #ifndef MLN_VALUE_SHELL_HH
27 # define MLN_VALUE_SHELL_HH
33 # include <mln/core/concept/proxy.hh>
34 # include <mln/core/concept/function.hh>
35 # include <mln/core/concept/image.hh>
43 template <
typename F,
typename I>
struct shell;
52 template <
typename F,
typename I,
class C>
56 template <
typename F,
typename I>
57 struct shell_<F, I, Function_v2v<void> >
60 set_(I& ima,
const mln_site(I)& s, mln_result(F) v);
66 template <
typename F,
typename I>
68 :
public Proxy< shell<F,I> >,
69 public mln::internal::proxy_impl< mln_result(F), shell<F,I> >,
70 public impl::shell_<F, I, typename F::category>
72 typedef mln_result(F) value;
75 shell(Image<I> &ima, const mln_site(I) &s);
78 value operator=(value);
86 mln_result(F) subj_();
102 # ifndef MLN_INCLUDE_ONLY
105 template <
typename F,
typename I>
106 shell<F,I>::shell(Image<I>& ima,
const mln_site(I)& s)
110 v_(F()(exact(ima)(s)))
115 template <
typename F,
typename I>
117 shell<F,I>::operator=(mln_result(F) v)
119 v_ = F()(set_(ima_, s_, v));
123 template <
typename F,
typename I>
144 template <
typename F,
typename I>
146 shell_<F, I, Function_v2v<void> >::set_(I& ima,
147 const mln_site(I)& s,
150 ima(s) = F().f_1(v, ima(s));
157 # endif // MLN_INCLUDE_ONLY
164 #endif // ! MLN_VALUE_SHELL_HH