31#ifndef ETL_CUMULATIVE_MOVING_AVERAGE_INCLUDED
32#define ETL_CUMULATIVE_MOVING_AVERAGE_INCLUDED
40 namespace private_pseudo_moving_average
46 template <
typename TPseudo_Moving_Average>
47 class add_insert_iterator :
public etl::iterator<ETL_OR_STD::output_iterator_tag, typename TPseudo_Moving_Average::value_type, void, void, void>
52 explicit add_insert_iterator(TPseudo_Moving_Average& pma) ETL_NOEXCEPT
58 add_insert_iterator& operator*() ETL_NOEXCEPT
64 add_insert_iterator& operator++() ETL_NOEXCEPT
70 add_insert_iterator& operator++(
int) ETL_NOEXCEPT
76 add_insert_iterator& operator =(
typename TPseudo_Moving_Average::value_type value)
84 TPseudo_Moving_Average* p_pma;
95 const size_t SAMPLE_SIZE,
96 const size_t SCALING = 1U,
97 const bool IsIntegral = etl::is_integral<T>::value,
108 template <
typename T, const
size_t SAMPLE_SIZE_, const
size_t SCALING_>
118 static ETL_CONSTANT sample_t SAMPLES =
static_cast<sample_t
>(SAMPLE_SIZE_);
119 static ETL_CONSTANT scale_t SCALE =
static_cast<scale_t
>(SCALING_);
123 typedef T value_type;
127 static ETL_CONSTANT
size_t SCALING = SCALING_;
134 : average(initial_value * SCALE)
144 average = (initial_value * SCALE);
154 average += SCALE * new_value;
155 average /= SAMPLES + sample_t(1);
173 return add_insert_iterator(*
this);
181 template <
typename T, const
size_t SAMPLE_SIZE_, const
size_t SCALING_>
184 template <
typename T, const
size_t SAMPLE_SIZE_, const
size_t SCALING_>
193 template <
typename T, const
size_t SCALING_>
201 static ETL_CONSTANT scale_t SCALE =
static_cast<scale_t
>(SCALING_);
205 typedef T value_type;
208 static ETL_CONSTANT
size_t SCALING = SCALING_;
215 : average(initial_value * SCALE)
216 , samples(sample_t(sample_size))
226 average = (initial_value * SCALE);
235 samples = sample_t(sample_size);
245 average += SCALE * new_value;
246 average /= samples + sample_t(1);
264 return add_insert_iterator(*
this);
273 template <
typename T, const
size_t SCALING_>
282 template <
typename T, const
size_t SAMPLE_SIZE_>
289 typedef T value_type;
292 static ETL_CONSTANT
size_t SAMPLE_SIZE = SAMPLE_SIZE_;
299 : reciprocal_samples_plus_1(T(1.0) / T(SAMPLE_SIZE_ + 1U))
300 , average(initial_value)
310 average = initial_value;
317 void add(
const T new_value)
319 average += (new_value - average) * reciprocal_samples_plus_1;
337 return add_insert_iterator(*
this);
342 const T reciprocal_samples_plus_1;
346 template <
typename T, const
size_t SAMPLE_SIZE_>
347 ETL_CONSTANT
size_t pseudo_moving_average<T, SAMPLE_SIZE_, 1U, false, true>::SAMPLE_SIZE;
354 template <
typename T>
361 typedef T value_type;
369 : reciprocal_samples_plus_1(T(1.0) / T(sample_size + 1U))
370 , average(initial_value)
380 average = initial_value;
389 reciprocal_samples_plus_1 = T(1.0) / (T(sample_size) + T(1));
396 void add(
const T new_value)
398 average += (new_value - average) * reciprocal_samples_plus_1;
416 return add_insert_iterator(*
this);
421 T reciprocal_samples_plus_1;
Definition pseudo_moving_average.h:48
pseudo_moving_average(const T initial_value, const size_t sample_size)
Definition pseudo_moving_average.h:214
void clear(const T initial_value)
Definition pseudo_moving_average.h:224
void add(T new_value)
Definition pseudo_moving_average.h:242
T value() const
Definition pseudo_moving_average.h:253
void set_sample_size(const size_t sample_size)
Definition pseudo_moving_average.h:233
add_insert_iterator input()
Definition pseudo_moving_average.h:262
static ETL_CONSTANT size_t SCALING
The sample scaling factor.
Definition pseudo_moving_average.h:208
add_insert_iterator input()
Definition pseudo_moving_average.h:414
void set_sample_size(const size_t sample_size)
Definition pseudo_moving_average.h:387
pseudo_moving_average(const T initial_value, const size_t sample_size)
Definition pseudo_moving_average.h:368
T value() const
Definition pseudo_moving_average.h:405
void add(const T new_value)
Definition pseudo_moving_average.h:396
void clear(const T initial_value)
Definition pseudo_moving_average.h:378
void clear(const T initial_value)
Definition pseudo_moving_average.h:308
T value() const
Definition pseudo_moving_average.h:326
add_insert_iterator input()
Definition pseudo_moving_average.h:335
void add(const T new_value)
Definition pseudo_moving_average.h:317
pseudo_moving_average(const T initial_value)
Definition pseudo_moving_average.h:298
void add(T new_value)
Definition pseudo_moving_average.h:151
pseudo_moving_average(const T initial_value)
Definition pseudo_moving_average.h:133
T value() const
Definition pseudo_moving_average.h:162
static ETL_CONSTANT size_t SAMPLE_SIZE
The number of samples averaged over.
Definition pseudo_moving_average.h:126
void clear(const T initial_value)
Definition pseudo_moving_average.h:142
add_insert_iterator input()
Definition pseudo_moving_average.h:171
static ETL_CONSTANT size_t SCALING
The sample scaling factor.
Definition pseudo_moving_average.h:127
Definition pseudo_moving_average.h:99
conditional
Definition type_traits_generator.h:1223
is_floating_point
Definition type_traits_generator.h:1094
bitset_ext
Definition absolute.h:39
iterator
Definition iterator.h:399