// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef UI_EVENTS_GESTURES_VELOCITY_CALCULATOR_H_
#define UI_EVENTS_GESTURES_VELOCITY_CALCULATOR_H_

#include <vector>

#include "base/basictypes.h"
#include "base/memory/scoped_ptr.h"
#include "ui/events/events_export.h"

namespace ui {

class EVENTS_EXPORT VelocityCalculator {
 public:
  explicit VelocityCalculator(int bufferSize);
  ~VelocityCalculator();
  void PointSeen(float x, float y, int64 time);
  float XVelocity();
  float YVelocity();
  float VelocitySquared();
  void ClearHistory();

 private:
  struct Point {
    float x;
    float y;
    int64 time;
  };

  void UpdateVelocity();

  typedef scoped_ptr<Point[]> HistoryBuffer;
  HistoryBuffer buffer_;

  // index_ points directly after the last point added.
  int index_;
  size_t num_valid_entries_;
  const size_t buffer_size_;
  float x_velocity_;
  float y_velocity_;
  bool velocities_stale_;
  DISALLOW_COPY_AND_ASSIGN(VelocityCalculator);
};

}  // namespace ui

#endif  // UI_EVENTS_GESTURES_VELOCITY_CALCULATOR_H_