blob: 8839561718eab838e511e9b40bb585573406ae98 [file] [log] [blame]
// Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'dart:math';
import 'dart:typed_data';
class SlidingStatistics {
final Uint32List _values;
int _index = 0;
bool _isReady = false;
SlidingStatistics(int length) : _values = Uint32List(length);
bool get isReady => _isReady;
int get max {
var result = 0;
for (var value in _values) {
if (value > result) {
result = value;
}
}
return result;
}
double get mean {
assert(isReady);
var sum = 0.0;
for (var value in _values) {
sum += value;
}
return sum / _values.length;
}
int get min {
var result = 1 << 20;
for (var value in _values) {
if (value < result) {
result = value;
}
}
return result;
}
double get standardDeviation {
assert(isReady);
var mean = this.mean;
var sum = 0.0;
for (var value in _values) {
var diff = value - mean;
sum += diff * diff;
}
return sqrt(sum / _values.length);
}
void add(int value) {
_values[_index] = value;
_index++;
if (_index == _values.length) {
_isReady = true;
}
_index %= _values.length;
}
}