/*
 *  Copyright 2016 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 WEBRTC_MODULES_AUDIO_PROCESSING_UTILITY_BLOCK_MEAN_CALCULATOR_H_
#define WEBRTC_MODULES_AUDIO_PROCESSING_UTILITY_BLOCK_MEAN_CALCULATOR_H_

#include <stddef.h>

#include "webrtc/base/constructormagic.h"

namespace webrtc {

// BlockMeanCalculator calculates the mean of a block of values. Values are
// added one after another, and the mean is updated at the end of every block.
class BlockMeanCalculator {
 public:
  explicit BlockMeanCalculator(size_t block_length);

  // Reset.
  void Reset();

  // Add one value to the sequence.
  void AddValue(float value);

  // Return whether the latest added value was at the end of a block.
  bool EndOfBlock() const;

  // Return the latest mean.
  float GetLatestMean() const;

 private:
  // Clear all values added.
  void Clear();

  const size_t block_length_;
  size_t count_;
  float sum_;
  float mean_;

  RTC_DISALLOW_COPY_AND_ASSIGN(BlockMeanCalculator);
};

}  // namespace webrtc

#endif  // WEBRTC_MODULES_AUDIO_PROCESSING_UTILITY_BLOCK_MEAN_CALCULATOR_H_
