1 #ifndef TIL_ACCUMULATOR_H_ 2 #define TIL_ACCUMULATOR_H_ 24 template <
typename T >
27 template <
typename TIterator >
28 void range(TIterator, TIterator) {}
30 template <
typename TContainer >
44 unsigned int get()
const {
return m_count; }
48 template <
typename T >
52 template <
typename TIterator >
53 void range(
const TIterator & start,
const TIterator & finish)
54 { m_count += std::distance(start, finish); }
56 template <
typename TContainer >
58 { m_count +=
size(c); }
80 template <
typename T,
typename TAccumulation,
typename AccumulationPolicy,
typename RecordPolicy = policy::AccumulatorRecord_None>
87 , m_accumulationPolicy()
94 const TAccumulation &
get()
const {
return m_accumulation; }
96 const RecordPolicy &
recordPolicy()
const {
return m_recordPolicy; }
99 void clear() { m_accumulation.clear(); }
105 { m_accumulationPolicy(m_accumulation, value); }
108 template <
typename TIterator >
110 typename boost::enable_if<boost::is_same<typename value_type_of<TIterator>::type, T> >::type
113 m_recordPolicy.range(begin, end);
114 for (; begin != end; ++begin)
119 this->accumulate(*begin);
125 TAccumulation m_accumulation;
126 AccumulationPolicy m_accumulationPolicy;
127 RecordPolicy m_recordPolicy;
138 template <
typename T,
typename TAccumulation >
140 public Accumulator<T, TAccumulation, functor::AddTo<TAccumulation, T>, policy::AccumulatorRecord_Sum >
152 return this->Base::get() / this->recordPolicy().
get();
void range(TIterator, TIterator)
Accumulator< T, TAccumulation, functor::AddTo< TAccumulation, T >, policy::AccumulatorRecord_Sum > Base
boost::enable_if< boost::is_same< typename value_type_of< TIterator >::type, T > >::type accumulate(TIterator begin, TIterator end)
Accumulate values spanned by given range.
void container(TContainer &)
This Record policy counts the number of elements that have been added.
Belongs to package Box Do not include directly, include til/Box.h instead.
numeric_array< T, D > size(const Box< T, D > &box)
Return the size of a box.
const TAccumulation & get() const
Get accumulation result.
void accumulate(typename boost::call_traits< T >::param_type value)
Accumulate a value.
void clear()
clear accumulated values
A class to accumulate values and return their mean.
Record nothing while accumulating values.
A class to accumulate value.
const RecordPolicy & recordPolicy() const
Get record policy.
MeanAccumulator< T, TAccumulation > Self
void container(const TContainer &c)
void range(const TIterator &start, const TIterator &finish)