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_ACCU_NIL_HH
00027 # define MLN_ACCU_NIL_HH
00028
00034
00035 # include <mln/core/concept/meta_accumulator.hh>
00036 # include <mln/accu/internal/base.hh>
00037 # include <mln/util/eat.hh>
00038 # include <mln/util/ignore.hh>
00039
00040
00041 namespace mln
00042 {
00043
00044 namespace accu
00045 {
00046
00048 template <typename T>
00049 struct nil : public mln::accu::internal::base< util::ignore , nil<T> >
00050 {
00051 typedef util::eat argument;
00052
00053 nil();
00054
00057 void init();
00058 void take_as_init_(const argument&);
00059 void take(const argument&);
00060 void take(const nil<T>&);
00062
00064 util::ignore to_result() const;
00065
00068 bool is_valid() const;
00069 };
00070
00071
00072 namespace meta
00073 {
00074
00076
00077 struct nil : public Meta_Accumulator< nil >
00078 {
00079 template <typename V>
00080 struct with
00081 {
00082 typedef accu::nil<V> ret;
00083 };
00084 };
00085
00086 }
00087
00088
00089 # ifndef MLN_INCLUDE_ONLY
00090
00091 template <typename T>
00092 inline
00093 nil<T>::nil()
00094 {
00095 }
00096
00097 template <typename T>
00098 inline
00099 void
00100 nil<T>::init()
00101 {
00102 }
00103
00104 template <typename T>
00105 inline
00106 void
00107 nil<T>::take(const argument&)
00108 {
00109 }
00110
00111 template <typename T>
00112 inline
00113 void
00114 nil<T>::take_as_init_(const argument&)
00115 {
00116 }
00117
00118 template <typename T>
00119 inline
00120 void
00121 nil<T>::take(const nil<T>&)
00122 {
00123 }
00124
00125 template <typename T>
00126 inline
00127 util::ignore
00128 nil<T>::to_result() const
00129 {
00130 return util::ignore();
00131 }
00132
00133 template <typename T>
00134 inline
00135 bool
00136 nil<T>::is_valid() const
00137 {
00138 return true;
00139 }
00140
00141
00142 # endif // ! MLN_INCLUDE_ONLY
00143
00144 }
00145
00146 }
00147
00148
00149 #endif // ! MLN_ACCU_NIL_HH