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) {
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);
}
}
-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;
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) {
}
}
-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();
}