00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 #ifndef MLN_FUN_V2V_CH_FUNCTION_VALUE_HH
00027 # define MLN_FUN_V2V_CH_FUNCTION_VALUE_HH
00028 
00032 
00033 # include <mln/core/concept/function.hh>
00034 # include <mln/fun/internal/ch_function_value_impl.hh>
00035 
00036 
00037 
00038 namespace mln
00039 {
00040 
00041   
00042   namespace convert { template <typename T, typename O> T to(const O& from); }
00043 
00044   namespace fun
00045   {
00046 
00047     namespace v2v
00048     {
00049 
00051       template <typename F, typename V>
00052       class ch_function_value : public Function_v2v< ch_function_value<F,V> >,
00053                                 public internal::ch_function_value_impl<F, V>
00054       {
00055       public:
00056         typedef F function;
00057         typedef V result;
00058         typedef V rvalue;
00059         typedef V lvalue;
00060 
00061         ch_function_value();
00062         ch_function_value(const F& f);
00063 
00064         template <typename W>
00065         V operator()(const W& w) const;
00066 
00067       private:
00068         F f_;
00069       };
00070 
00071 
00072 # ifndef MLN_INCLUDE_ONLY
00073 
00074       template <typename F, typename V>
00075       inline
00076       ch_function_value<F,V>::ch_function_value()
00077       {
00078       }
00079 
00080       template <typename F, typename V>
00081       inline
00082       ch_function_value<F,V>::ch_function_value(const F& f)
00083       {
00084         f_ = f;
00085       }
00086 
00087       template <typename F, typename V>
00088       template <typename W>
00089       inline
00090       V
00091       ch_function_value<F,V>::operator()(const W& w) const
00092       {
00093         return mln::convert::to<V>(f_(w));
00094       }
00095 
00096 # endif // ! MLN_INCLUDE_ONLY
00097 
00098     } 
00099 
00100   } 
00101 
00102 } 
00103 
00104 
00105 #endif // ! MLN_FUN_V2V_CH_FUNCTION_VALUE_HH