26 #ifndef MLN_ACCU_STAT_MEAN_HH
27 # define MLN_ACCU_STAT_MEAN_HH
35 # include <mln/accu/internal/base.hh>
36 # include <mln/accu/math/count.hh>
37 # include <mln/accu/math/sum.hh>
50 template <
typename T,
typename S,
typename M>
67 template <
typename T,
68 typename S = mln_sum(T),
88 template <
typename T,
typename S,
typename M>
89 struct accumulator_< accu::stat::mean<T, S, M> >
91 typedef accumulator::has_untake::yes has_untake;
92 typedef accumulator::has_set_value::no has_set_value;
93 typedef accumulator::has_stop::no has_stop;
94 typedef accumulator::when_pix::use_v when_pix;
116 template <
typename T,
117 typename S = mln_sum(T),
119 struct mean :
public mln::accu::internal::base< M , mean<T,S,M> >
129 void take(
const argument& t);
131 void untake(
const argument& t);
157 template <
typename I,
typename S,
typename M>
158 struct mean< util::pix<I>, S,M >;
161 # ifndef MLN_INCLUDE_ONLY
163 template <typename T, typename S, typename M>
170 template <
typename T,
typename S,
typename M>
179 template <
typename T,
typename S,
typename M>
187 template <
typename T,
typename S,
typename M>
190 mean<T,S,M>::take(
const mean<T,S,M>& other)
192 count_.take(other.count_);
193 sum_.take(other.sum_);
196 template <
typename T,
typename S,
typename M>
198 void mean<T,S,M>::untake(
const argument& t)
204 template <
typename T,
typename S,
typename M>
207 mean<T,S,M>::untake(
const mean<T,S,M>& other)
209 count_.untake(other.count_);
210 sum_.untake(other.sum_);
213 template <
typename T,
typename S,
typename M>
218 unsigned n = count_.to_result();
221 return static_cast<M
>(sum_.to_result() / n);
224 template <
typename T,
typename S,
typename M>
231 template <
typename T,
typename S,
typename M>
236 return count_.to_result() != 0;
239 template <
typename T,
typename S,
typename M>
248 template <
typename T,
typename S,
typename M>
256 # endif // ! MLN_INCLUDE_ONLY
264 #endif // ! MLN_ACCU_STAT_MEAN_HH