/*
 *  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, 0u);
  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
