-// RunningAverage : a class to calculate a running average of a series of values.
-// For efficiency, all computations are done with integers.
-class RunningAverage {
- public:
-
- // Constructor
- RunningAverage() {}
-
- // Reset the running average to rational value p / q
- void set(int64_t p, int64_t q)
- { average = p * PERIOD * RESOLUTION / q; }
-
- // Update average with value v
- void update(int64_t v)
- { average = RESOLUTION * v + (PERIOD - 1) * average / PERIOD; }
-
- // Test if average is strictly greater than rational a / b
- bool is_greater(int64_t a, int64_t b)
- { return b * average > a * PERIOD * RESOLUTION ; }
-
- private :
- static constexpr int64_t PERIOD = 4096;
- static constexpr int64_t RESOLUTION = 1024;
- int64_t average;
-};
-
-
-template <typename T>
-class ValueListInserter {
-public:
- ValueListInserter(T* v, std::size_t& s) :
- values(v),
- size(&s)
- {
- }
-
- void push_back(const T& value) { values[(*size)++] = value; }
-private:
- T* values;
- std::size_t* size;
-};
-