/*
- * Copyright 2014 Facebook, Inc.
+ * Copyright 2016 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* limitations under the License.
*/
-#ifndef FOLLY_STATS_MULTILEVELTIMESERIES_DEFS_H_
-#define FOLLY_STATS_MULTILEVELTIMESERIES_DEFS_H_
+#pragma once
+#include <folly/stats/MultiLevelTimeSeries.h>
#include <glog/logging.h>
namespace folly {
CHECK(levelDurations);
levels_.reserve(nLevels);
- for (int i = 0; i < nLevels; ++i) {
+ for (size_t i = 0; i < nLevels; ++i) {
if (levelDurations[i] == TT(0)) {
CHECK_EQ(i, nLevels - 1);
} else if (i > 0) {
}
template <typename VT, typename TT>
-void MultiLevelTimeSeries<VT, TT>::addValue(TimeType now,
- const ValueType& val) {
+MultiLevelTimeSeries<VT, TT>::MultiLevelTimeSeries(
+ size_t nBuckets,
+ std::initializer_list<TimeType> durations)
+ : cachedTime_(0), cachedSum_(0), cachedCount_(0) {
+ CHECK_GT(durations.size(), 0);
+
+ levels_.reserve(durations.size());
+ int i = 0;
+ TimeType prev;
+ for (auto dur : durations) {
+ if (dur == TT(0)) {
+ CHECK_EQ(i, durations.size() - 1);
+ } else if (i > 0) {
+ CHECK(prev < dur);
+ }
+ levels_.emplace_back(nBuckets, dur);
+ prev = dur;
+ i++;
+ }
+}
+
+template <typename VT, typename TT>
+void MultiLevelTimeSeries<VT, TT>::addValue(
+ TimeType now,
+ const ValueType& val) {
addValueAggregated(now, val, 1);
}
template <typename VT, typename TT>
void MultiLevelTimeSeries<VT, TT>::update(TimeType now) {
flush();
- for (int i = 0; i < levels_.size(); ++i) {
+ for (size_t i = 0; i < levels_.size(); ++i) {
levels_[i].update(now);
}
}
void MultiLevelTimeSeries<VT, TT>::flush() {
// update all the underlying levels
if (cachedCount_ > 0) {
- for (int i = 0; i < levels_.size(); ++i) {
+ for (size_t i = 0; i < levels_.size(); ++i) {
levels_[i].addValueAggregated(cachedTime_, cachedSum_, cachedCount_);
}
cachedCount_ = 0;
}
} // folly
-
-#endif // FOLLY_STATS_MULTILEVELTIMESERIES_DEFS_H_