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_CST_HH
00027 # define MLN_PW_CST_HH
00028
00032
00033 # include <mln/fun/internal/selector.hh>
00034 # include <mln/value/equiv.hh>
00035 # include <mln/value/concept/scalar.hh>
00036
00037
00038 namespace mln
00039 {
00040
00041
00042 namespace pw
00043 {
00044
00045 template <typename T>
00046 struct cst_;
00047
00048 template <typename T>
00049 cst_<T> cst(const T& t);
00050
00051 }
00052
00053
00054 namespace trait
00055 {
00056
00057 template <typename F, typename S>
00058 struct set_binary_< op::eq, mln::Function_v2v, F, mln::value::Scalar, S >
00059 {
00060 typedef mln_trait_op_eq(F, pw::cst_<mln_value_equiv(S)>) ret;
00061 };
00062
00063 }
00064
00065
00066 template <typename F, typename S>
00067 mln_trait_op_eq(F,S)
00068 operator == (const Function_v2v<F>& fun, const value::Scalar<S>& s)
00069 {
00070 return exact(fun) == pw::cst( value::equiv(s) );
00071 }
00072
00073
00074
00075 namespace pw
00076 {
00077
00078
00079
00080 template <typename T>
00081 struct cst_
00082 : fun::internal::selector_from_result_<T, cst_<T> >::ret
00083 {
00084 typedef T result;
00085
00086 cst_();
00087
00088 cst_(const T& t);
00089
00090 template <typename P>
00091 T operator()(const P&) const;
00092
00093 private:
00094 T t_;
00095 };
00096
00097
00098
00099
00100 template <typename T>
00101 cst_<T> cst(const T& t);
00102
00103
00104 # ifndef MLN_INCLUDE_ONLY
00105
00106
00107
00108 template <typename T>
00109 inline
00110 cst_<T>::cst_()
00111 {
00112 }
00113
00114 template <typename T>
00115 inline
00116 cst_<T>::cst_(const T& t)
00117 : t_(t)
00118 {
00119 }
00120
00121 template <typename T>
00122 template <typename P>
00123 inline
00124 T
00125 cst_<T>::operator()(const P&) const
00126 {
00127 return t_;
00128 }
00129
00130
00131
00132 template <typename T>
00133 inline
00134 cst_<T> cst(const T& t)
00135 {
00136 cst_<T> tmp(t);
00137 return tmp;
00138 }
00139
00140 # endif // ! MLN_INCLUDE_ONLY
00141
00142 }
00143
00144 }
00145
00146
00147 #endif // ! MLN_PW_CST_HH