/*
 *  Copyright (c) 2018 The WebRTC project authors. All Rights Reserved.
 *
 *  Use of this source code is governed by a BSD-style license
 *  that can be found in the LICENSE file in the root of the source
 *  tree. An additional intellectual property rights grant can be found
 *  in the file PATENTS.  All contributing project authors may
 *  be found in the AUTHORS file in the root of the source tree.
 */

#ifndef RTC_BASE_NUMERICS_SAMPLE_COUNTER_H_
#define RTC_BASE_NUMERICS_SAMPLE_COUNTER_H_

#include "api/optional.h"

namespace rtc {

// Simple utility class for counting basic statistics (max./avg./variance) on
// stream of samples.
class SampleCounter {
 public:
  SampleCounter();
  ~SampleCounter();
  void Add(int sample);
  rtc::Optional<int> Avg(int64_t min_required_samples) const;
  rtc::Optional<int64_t> Variance(int64_t min_required_samples) const;
  rtc::Optional<int> Max() const;
  void Reset();
  // Adds all the samples from the |other| SampleCounter as if they were all
  // individually added using |Add(int)| method.
  void Add(const SampleCounter& other);

 private:
  int64_t sum_ = 0;
  int64_t sum_squared_ = 0;
  int64_t num_samples_ = 0;
  rtc::Optional<int> max_;
};

}  // namespace rtc
#endif  // RTC_BASE_NUMERICS_SAMPLE_COUNTER_H_
