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
00030
00031
00032 #ifndef MLN_FUN_FROM_ACCU_HH
00033 # define MLN_FUN_FROM_ACCU_HH
00034
00035 # include <mln/fun/unary_param.hh>
00036 # include <mln/core/concept/accumulator.hh>
00037
00038
00039 namespace mln
00040 {
00041
00042 namespace fun
00043 {
00044
00045
00048 template <typename A>
00049 struct from_accu : unary_param<from_accu<A>, A*>
00050 {
00051 from_accu();
00052 from_accu(A* a);
00053 };
00054
00055 }
00056
00057 namespace trait
00058 {
00059
00060 namespace next
00061 {
00062 template <typename A, typename T>
00063 struct set_unary_<mln::fun::from_accu<A>, mln::Object, T>
00064 {
00065 typedef set_unary_ ret;
00066 typedef typename A::result result;
00067 typedef typename A::argument argument;
00068 typedef A* param_t;
00069
00070 static result read(const param_t& accu_, const argument& x);
00071
00072 };
00073
00074 }
00075
00076 }
00077
00078
00079
00080 # ifndef MLN_INCLUDE_ONLY
00081
00082
00083 namespace fun
00084 {
00085
00086 template <typename A>
00087 inline
00088 from_accu<A>::from_accu()
00089 : unary_param<from_accu<A>, A*>()
00090 {
00091
00092 }
00093
00094
00095 template <typename A>
00096 inline
00097 from_accu<A>::from_accu(A* a)
00098 : unary_param<from_accu<A>, A*>(a)
00099 {
00100
00101 }
00102
00103 }
00104
00105
00106
00107 namespace trait
00108 {
00109
00110 namespace next
00111 {
00112
00113 template <typename A, typename T>
00114 inline
00115 typename set_unary_<mln::fun::from_accu<A>, mln::Object, T>::result
00116 set_unary_<mln::fun::from_accu<A>,
00117 mln::Object, T>::read(const param_t& accu_,
00118 const argument& x)
00119 {
00120 mln_precondition(accu_ != 0);
00121
00122 accu_->take(x);
00123 return accu_->to_result ();
00124 }
00125
00126 }
00127
00128 }
00129
00130
00131
00132 # endif // ! MLN_INCLUDE_ONLY
00133
00134 }
00135
00136 #endif // ! MLN_FUN_FROM_ACCU_HH