MNP01/helpers.h
2018-03-18 21:31:48 +01:00

53 lines
1.0 KiB
C++

#ifndef HELPERS_H_
#define HELPERS_H_
#include <deque>
#include <iterator>
using std::deque;
template <typename T>
int sign(const T& value) {
return value < 0 ? -1 : (value > 0 ? 1 : 0);
}
template <typename T, class iter>
T ema(iter begin, iter end)
{
const std::size_t N = std::distance(begin, end);
const T a = T(1) - T(2) / T(N + 1);
T b = T(1);
T nominator = 0, denominator = 0;
for(iter it = begin; it < end; it++) {
nominator += *it * b;
denominator += b;
b *= a;
}
return nominator / denominator;
}
template <typename T>
class buffer : public deque<T>
{
using deque<T>::deque;
std::size_t limit;
public:
buffer(std::size_t limit) : limit(limit), deque<T>(limit) {};
buffer(std::size_t limit, const T& value) : limit(limit), deque<T>(limit, value) {};
void add(const T& value)
{
if (this->size() >= limit) {
this->pop_back();
}
push_front(value);
}
};
#endif