diff --git a/code/espurna/filters/LastFilter.h b/code/espurna/filters/LastFilter.h index 9d5bb97d..703a09b9 100644 --- a/code/espurna/filters/LastFilter.h +++ b/code/espurna/filters/LastFilter.h @@ -18,7 +18,11 @@ public: } void reset() override { - _value = 0; + _reset(); + } + + void resize(size_t) override { + _reset(); } double value() const override { @@ -26,6 +30,10 @@ public: } private: + void _reset() { + _value = 0; + } + double _value = 0; bool _status = false; }; diff --git a/code/espurna/filters/MaxFilter.h b/code/espurna/filters/MaxFilter.h index 860c8ebd..87779f86 100644 --- a/code/espurna/filters/MaxFilter.h +++ b/code/espurna/filters/MaxFilter.h @@ -19,8 +19,12 @@ public: return 1; } + void resize(size_t) override { + _reset(); + } + void reset() override { - _value = 0; + _reset(); } double value() const { @@ -28,5 +32,9 @@ public: } private: + void _reset() { + _value = 0; + } + double _value = 0; }; diff --git a/code/espurna/filters/MedianFilter.h b/code/espurna/filters/MedianFilter.h index bf977856..507b4fe9 100644 --- a/code/espurna/filters/MedianFilter.h +++ b/code/espurna/filters/MedianFilter.h @@ -19,12 +19,7 @@ public: } void reset() override { - if (_values.size() > 2) { - _values[0] = _values.back(); - _values.resize(1); - } else { - _values.clear(); - } + _reset(); } double value() const override { @@ -66,14 +61,20 @@ public: } void resize(size_t capacity) override { - if (_capacity != capacity) { - _capacity = capacity; - _values.clear(); - _values.reserve(_capacity + 1); - } + _values.reserve(capacity + 1); + _reset(); } private: + void _reset() { + auto previous = _values.size() + ? _values.back() + : 0.0; + _values.clear(); + _values.push_back(previous); + + } + std::vector _values; size_t _capacity = 0; }; diff --git a/code/espurna/filters/MovingAverageFilter.h b/code/espurna/filters/MovingAverageFilter.h index da0ab152..01460dd8 100644 --- a/code/espurna/filters/MovingAverageFilter.h +++ b/code/espurna/filters/MovingAverageFilter.h @@ -36,14 +36,22 @@ public: } void resize(size_t size) override { - _values.clear(); _values.reserve(size); + _reset(); } void reset() override { - _values.clear(); + _reset(); } private: + void _reset() { + if (_values.size()) { + _values.erase(_values.begin(), _values.end() - 1); + } else { + _values.clear(); + } + } + std::vector _values{}; }; diff --git a/code/espurna/filters/SumFilter.h b/code/espurna/filters/SumFilter.h index d6dd98d0..e5cb4ea6 100644 --- a/code/espurna/filters/SumFilter.h +++ b/code/espurna/filters/SumFilter.h @@ -17,8 +17,12 @@ public: return 1; } + void resize(size_t) override { + _reset(); + } + void reset() override { - _value = 0.0; + _reset(); } double value() const override { @@ -26,5 +30,9 @@ public: } private: + void _reset() { + _value = 0.0; + } + double _value = 0.0; };