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_PW_VAR_HH
00027 # define MLN_PW_VAR_HH
00028
00034 # include <mln/core/concept/function.hh>
00035
00036
00037 namespace mln
00038 {
00039
00040
00041
00042 namespace pw
00043 {
00044
00045 template <typename V>
00046 struct var_ : public Function_v2v< var_<V> >
00047 {
00048 typedef V result;
00049
00050 var_();
00051
00052 var_(const V& v);
00053
00054 template <typename P>
00055 const V& operator()(const P&) const;
00056
00057 private:
00058 const V* v_;
00059 };
00060
00061
00062 template <typename V>
00063 var_<V> var(const V& v);
00064
00065
00066 # ifndef MLN_INCLUDE_ONLY
00067
00068
00069
00070 template <typename V>
00071 inline
00072 var_<V>::var_()
00073 : v_(0)
00074 {
00075 }
00076
00077 template <typename V>
00078 inline
00079 var_<V>::var_(const V& v)
00080 : v_(&v)
00081 {
00082 }
00083
00084 template <typename V>
00085 template <typename P>
00086 inline
00087 const V&
00088 var_<V>::operator()(const P&) const
00089 {
00090 mln_precondition(v_ != 0);
00091 return *v_;
00092 }
00093
00094
00095
00096 template <typename V>
00097 inline
00098 var_<V> var(const V& v)
00099 {
00100 var_<V> tmp(v);
00101 return tmp;
00102 }
00103
00104 # endif // ! MLN_INCLUDE_ONLY
00105
00106 }
00107
00108 }
00109
00110
00111 #endif // ! MLN_PW_VAR_HH