/*
 *  Copyright (c) 2013 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.
 */

#include "webrtc/modules/audio_processing/transient/moving_moments.h"

#include <math.h>
#include <string.h>

#include "webrtc/base/checks.h"

namespace webrtc {

MovingMoments::MovingMoments(size_t length)
    : length_(length),
      queue_(),
      sum_(0.0),
      sum_of_squares_(0.0) {
  RTC_DCHECK_GT(length, 0);
  for (size_t i = 0; i < length; ++i) {
    queue_.push(0.0);
  }
}

MovingMoments::~MovingMoments() {}

void MovingMoments::CalculateMoments(const float* in, size_t in_length,
                                     float* first, float* second) {
  RTC_DCHECK(in && in_length > 0 && first && second);

  for (size_t i = 0; i < in_length; ++i) {
    const float old_value = queue_.front();
    queue_.pop();
    queue_.push(in[i]);

    sum_ += in[i] - old_value;
    sum_of_squares_ += in[i] * in[i] - old_value * old_value;
    first[i] = sum_ / length_;
    second[i] = sum_of_squares_ / length_;
  }
}

}  // namespace webrtc
