garmin-repafield/source/RollingAverage.mc
2023-10-27 16:02:37 +02:00

33 lines
753 B
MonkeyC

import Toybox.Lang;
import Toybox.Time;
import Toybox.Math;
class RollingAverage {
hidden var _size as Number;
hidden var _values as Array<Numeric>;
hidden var _index as Number;
function initialize(size as Number) {
_size = size;
_values = new[size];
_index = 0;
}
function insert(value as Numeric) {
_values[_index] = value;
_index = (_index + 1) % _size;
}
function get() as Numeric {
var sum = 0.0;
var count = 0;
for (var i = 0; i < _size; i++) {
var value = _values[i];
if (value != null) {
sum += value;
count++;
}
}
return count == 0 ? 0.0 : sum / count;
}
}