sclass Average { gettable double sum; gettable double n; void add aka addSample(double d) { ++n; sum += d; } void add(double d, double weight) { n += weight; sum += d*weight; } void remove(double d) { add(d, -1); } double get aka avg aka average aka getAverage() { ret doubleRatio(sum, n); } bool isEmpty() { ret n == 0; } toString { ret get() + " (n=" + n + ")"; } void clear { n = 0; sum = 0; } double size aka count() { ret n; } }