blob: 131be4f05f686313393586a3e2055f2293974dc2 [file]
// 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 (final value in _values) {
if (value > result) {
result = value;
}
}
return result;
}
double get mean {
assert(isReady);
var sum = 0.0;
for (final value in _values) {
sum += value;
}
return sum / _values.length;
}
int get min {
var result = 1 << 20;
for (final value in _values) {
if (value < result) {
result = value;
}
}
return result;
}
double get standardDeviation {
assert(isReady);
final mean = this.mean;
var sum = 0.0;
for (final value in _values) {
final 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;
}
}