Rename shadowing local variables in various stats objects
[folly.git] / folly / stats / MultiLevelTimeSeries-defs.h
1 /*
2  * Copyright 2014 Facebook, Inc.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *   http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 #ifndef FOLLY_STATS_MULTILEVELTIMESERIES_DEFS_H_
18 #define FOLLY_STATS_MULTILEVELTIMESERIES_DEFS_H_
19
20 #include <glog/logging.h>
21
22 namespace folly {
23
24 template <typename VT, typename TT>
25 MultiLevelTimeSeries<VT, TT>::MultiLevelTimeSeries(
26   size_t nBuckets,
27   size_t nLevels,
28   const TimeType levelDurations[])
29     : cachedTime_(0),
30       cachedSum_(0),
31       cachedCount_(0) {
32     CHECK_GT(nLevels, 0);
33     CHECK(levelDurations);
34
35     levels_.reserve(nLevels);
36     for (int i = 0; i < nLevels; ++i) {
37       if (levelDurations[i] == TT(0)) {
38         CHECK_EQ(i, nLevels - 1);
39       } else if (i > 0) {
40         CHECK(levelDurations[i-1] < levelDurations[i]);
41       }
42       levels_.emplace_back(nBuckets, levelDurations[i]);
43     }
44 }
45
46 template <typename VT, typename TT>
47 void MultiLevelTimeSeries<VT, TT>::addValue(TimeType now,
48                                             const ValueType& val) {
49   addValueAggregated(now, val, 1);
50 }
51
52 template <typename VT, typename TT>
53 void MultiLevelTimeSeries<VT, TT>::addValue(TimeType now,
54                                             const ValueType& val,
55                                             int64_t times) {
56   addValueAggregated(now, val * times, times);
57 }
58
59 template <typename VT, typename TT>
60 void MultiLevelTimeSeries<VT, TT>::addValueAggregated(TimeType now,
61                                                       const ValueType& total,
62                                                       int64_t nsamples) {
63   if (cachedTime_ != now) {
64     flush();
65     cachedTime_ = now;
66   }
67   cachedSum_ += total;
68   cachedCount_ += nsamples;
69 }
70
71 template <typename VT, typename TT>
72 void MultiLevelTimeSeries<VT, TT>::update(TimeType now) {
73   flush();
74   for (int i = 0; i < levels_.size(); ++i) {
75     levels_[i].update(now);
76   }
77 }
78
79 template <typename VT, typename TT>
80 void MultiLevelTimeSeries<VT, TT>::flush() {
81   // update all the underlying levels
82   if (cachedCount_ > 0) {
83     for (int i = 0; i < levels_.size(); ++i) {
84       levels_[i].addValueAggregated(cachedTime_, cachedSum_, cachedCount_);
85     }
86     cachedCount_ = 0;
87     cachedSum_ = 0;
88   }
89 }
90
91 template <typename VT, typename TT>
92 void MultiLevelTimeSeries<VT, TT>::clear() {
93   for (auto & level : levels_) {
94     level.clear();
95   }
96
97   cachedTime_ = TimeType(0);
98   cachedSum_ = 0;
99   cachedCount_ = 0;
100 }
101
102 }  // folly
103
104 #endif // FOLLY_STATS_MULTILEVELTIMESERIES_DEFS_H_