Adds AverageStat to stats.h.
authorTim King <taking@cs.nyu.edu>
Wed, 3 Nov 2010 01:07:09 +0000 (01:07 +0000)
committerTim King <taking@cs.nyu.edu>
Wed, 3 Nov 2010 01:07:09 +0000 (01:07 +0000)
src/util/stats.h

index d6b463e65ebb0490fae071db13a5dfe03fc1033f..02b642939d2b90712d5dbb054ae6ee5d4e50bb77 100644 (file)
@@ -263,6 +263,32 @@ public:
 };/* class IntStat */
 
 
+/**
+ * The value for an AverageStat is the running average of (e1, e_2, ..., e_n),
+ *   (e1 + e_2 + ... + e_n)/n,
+ * where e_i is an entry added by an addEntry(e_i) call.
+ * The value is initially always 0.
+ * (This is to avoid making parsers confused.)
+ */
+class AverageStat : public BackedStat<double> {
+private:
+  uint32_t n;
+
+public:
+  AverageStat(const std::string& s) :
+    BackedStat<double>(s, 0.0 ), n(0) {
+  }
+
+  void addEntry(double e){
+    double oldSum = n*getData();
+    ++n;
+    double newSum = oldSum + e;
+    setData(newSum / n);
+  }
+
+};/* class AverageStat */
+
+
 // some utility functions for ::timespec
 inline ::timespec& operator+=(::timespec& a, const ::timespec& b) {
   // assumes a.tv_nsec and b.tv_nsec are in range