a simple first step towards using clocks properly in the stats code
[folly.git] / folly / stats / MultiLevelTimeSeries-defs.h
index 763aaebe08a56099ecaf82c40c91413476113342..c3ddba896d963e4cbf86f3aaf7444f8c2bd5f61e 100644 (file)
 
 namespace folly {
 
-template <typename VT, typename TT>
-MultiLevelTimeSeries<VT, TT>::MultiLevelTimeSeries(
-  size_t nBuckets,
-  size_t nLevels,
-  const TimeType levelDurations[])
-    : cachedTime_(0),
-      cachedSum_(0),
-      cachedCount_(0) {
-    CHECK_GT(nLevels, 0);
-    CHECK(levelDurations);
+template <typename VT, typename CT>
+MultiLevelTimeSeries<VT, CT>::MultiLevelTimeSeries(
+    size_t nBuckets,
+    size_t nLevels,
+    const TimeType levelDurations[])
+    : cachedTime_(0), cachedSum_(0), cachedCount_(0) {
+  CHECK_GT(nLevels, 0);
+  CHECK(levelDurations);
 
-    levels_.reserve(nLevels);
-    for (size_t i = 0; i < nLevels; ++i) {
-      if (levelDurations[i] == TT(0)) {
-        CHECK_EQ(i, nLevels - 1);
-      } else if (i > 0) {
-        CHECK(levelDurations[i-1] < levelDurations[i]);
-      }
-      levels_.emplace_back(nBuckets, levelDurations[i]);
+  levels_.reserve(nLevels);
+  for (size_t i = 0; i < nLevels; ++i) {
+    if (levelDurations[i] == Duration(0)) {
+      CHECK_EQ(i, nLevels - 1);
+    } else if (i > 0) {
+      CHECK(levelDurations[i - 1] < levelDurations[i]);
     }
+    levels_.emplace_back(nBuckets, levelDurations[i]);
+  }
 }
 
-template <typename VT, typename TT>
-MultiLevelTimeSeries<VT, TT>::MultiLevelTimeSeries(
+template <typename VT, typename CT>
+MultiLevelTimeSeries<VT, CT>::MultiLevelTimeSeries(
     size_t nBuckets,
     std::initializer_list<TimeType> durations)
     : cachedTime_(0), cachedSum_(0), cachedCount_(0) {
@@ -54,7 +52,7 @@ MultiLevelTimeSeries<VT, TT>::MultiLevelTimeSeries(
   int i = 0;
   TimeType prev;
   for (auto dur : durations) {
-    if (dur == TT(0)) {
+    if (dur == Duration(0)) {
       CHECK_EQ(i, durations.size() - 1);
     } else if (i > 0) {
       CHECK(prev < dur);
@@ -65,24 +63,26 @@ MultiLevelTimeSeries<VT, TT>::MultiLevelTimeSeries(
   }
 }
 
-template <typename VT, typename TT>
-void MultiLevelTimeSeries<VT, TT>::addValue(
+template <typename VT, typename CT>
+void MultiLevelTimeSeries<VT, CT>::addValue(
     TimeType now,
     const ValueType& val) {
   addValueAggregated(now, val, 1);
 }
 
-template <typename VT, typename TT>
-void MultiLevelTimeSeries<VT, TT>::addValue(TimeType now,
-                                            const ValueType& val,
-                                            int64_t times) {
+template <typename VT, typename CT>
+void MultiLevelTimeSeries<VT, CT>::addValue(
+    TimeType now,
+    const ValueType& val,
+    int64_t times) {
   addValueAggregated(now, val * times, times);
 }
 
-template <typename VT, typename TT>
-void MultiLevelTimeSeries<VT, TT>::addValueAggregated(TimeType now,
-                                                      const ValueType& total,
-                                                      int64_t nsamples) {
+template <typename VT, typename CT>
+void MultiLevelTimeSeries<VT, CT>::addValueAggregated(
+    TimeType now,
+    const ValueType& total,
+    int64_t nsamples) {
   if (cachedTime_ != now) {
     flush();
     cachedTime_ = now;
@@ -91,16 +91,16 @@ void MultiLevelTimeSeries<VT, TT>::addValueAggregated(TimeType now,
   cachedCount_ += nsamples;
 }
 
-template <typename VT, typename TT>
-void MultiLevelTimeSeries<VT, TT>::update(TimeType now) {
+template <typename VT, typename CT>
+void MultiLevelTimeSeries<VT, CT>::update(TimeType now) {
   flush();
   for (size_t i = 0; i < levels_.size(); ++i) {
     levels_[i].update(now);
   }
 }
 
-template <typename VT, typename TT>
-void MultiLevelTimeSeries<VT, TT>::flush() {
+template <typename VT, typename CT>
+void MultiLevelTimeSeries<VT, CT>::flush() {
   // update all the underlying levels
   if (cachedCount_ > 0) {
     for (size_t i = 0; i < levels_.size(); ++i) {
@@ -111,8 +111,8 @@ void MultiLevelTimeSeries<VT, TT>::flush() {
   }
 }
 
-template <typename VT, typename TT>
-void MultiLevelTimeSeries<VT, TT>::clear() {
+template <typename VT, typename CT>
+void MultiLevelTimeSeries<VT, CT>::clear() {
   for (auto & level : levels_) {
     level.clear();
   }