14#ifndef OR_TOOLS_UTIL_RUNNING_STAT_H_
15#define OR_TOOLS_UTIL_RUNNING_STAT_H_
39 void Reset(
int window_size);
64 std::deque<int> values_;
69template <
class Number =
double>
80 void Add(Number value);
89 const int window_size_;
92 std::vector<Number> values_;
104 : window_size_(window_size),
108 CHECK_GT(window_size_, 0);
112 window_size_ = window_size;
120 global_sum_ += value;
122 values_.push_back(value);
123 if (
static_cast<int>(values_.size()) > window_size_) {
124 local_sum_ -= values_.front();
130 return num_adds_ == 0 ? 0.0 : global_sum_ /
static_cast<double>(num_adds_);
134 return values_.empty() ? 0.0
135 : local_sum_ /
static_cast<double>(values_.size());
144 return static_cast<int>(values_.size()) == window_size_;
147template <
class Number>
149 : window_size_(window_size), values_(), last_index_(0), max_index_(0) {
150 DCHECK_GT(window_size, 0);
153template <
class Number>
155 if (
static_cast<size_t>(values_.size()) < window_size_) {
159 max_index_ = values_.size();
161 values_.push_back(value);
165 DCHECK_EQ(values_.size(), window_size_);
169 max_index_ = last_index_;
170 values_[last_index_] = value;
172 values_[last_index_] = value;
173 if (last_index_ == max_index_) {
178 Number max_value = values_[max_index_];
179 for (
int i = 1; i < static_cast<int>(values_.size()); ++i) {
180 if (values_[i] > max_value) {
181 max_value = values_[i];
187 if (++last_index_ == window_size_) {
192template <
class Number>
199template <
class Number>
201 DCHECK(!values_.empty());
202 return values_[max_index_];
RunningAverage & operator=(const RunningAverage &)=delete
void ClearWindow()
Clears the current window.
double WindowAverage() const
RunningAverage(const RunningAverage &)=delete
This type is neither copyable nor movable.
bool IsWindowFull() const
double GlobalAverage() const
void Reset(int window_size)
void Add(int value)
Adds the next integer of the stream.
RunningAverage(int window_size=1)
################## Implementations below #####################
RunningMax(int window_size)
Takes the size of the running window. The size must be positive.
void Add(Number value)
Processes a new element from the stream.
RunningMax & operator=(const RunningMax &)=delete
RunningMax(const RunningMax &)=delete
This type is neither copyable nor movable.
In SWIG mode, we don't want anything besides these top-level includes.