Merge branch 'package'
[speedfreak] / Client / movingaverage.cpp
1 /*
2  *  Class for moving average of acceleration data.
3  *
4  * @author      Kai Rasilainen <kai.rasilainen@fudeco.com>
5  * @author      Toni Jussila   <toni.jussila@fudeco.com>
6  * @copyright   (c) 2010 Speed Freak team
7  * @license     http://opensource.org/licenses/gpl-license.php GNU Public License
8  */
9
10 #include "movingaverage.h"
11 #include <QList>
12
13 /**
14   * Constructor of this class.
15   *
16   * @param int size limit
17   */
18 MovingAverage::MovingAverage(int sizeLimit)
19 {
20     SizeLimit = sizeLimit;
21 }
22
23 /**
24   * Average.
25   *
26   * @return double average
27   */
28 double MovingAverage::Average()
29 {
30     double sum = 0;
31
32     if (queue.count() == 0)
33         return 0;
34
35     QList<double> temp = queue;
36     foreach (double value, temp)
37     {
38         sum += value;
39     }
40
41     return sum / queue.count();
42 }
43
44 /**
45   * Resize.
46   *
47   * @param int size limit
48   */
49 void MovingAverage::Resize(int sizeLimit)
50 {
51     SizeLimit = sizeLimit;
52     while (queue.count() > SizeLimit)
53     {
54         queue.dequeue();
55     }
56 }
57
58 /**
59   * Enqueue.
60   *
61   * @param double item
62   */
63 void MovingAverage::Enqueue(double item)
64 {
65     queue.enqueue(item);
66     if (queue.count() > SizeLimit)
67         queue.dequeue();
68 }