Browse Subversion Repository
Contents of /common/MovingAverage.h
Parent Directory
| Revision Log
Revision 279 -
( show annotations)
( download)
( as text)
Wed Mar 12 05:28:19 2008 UTC
(16 years, 1 month ago)
by satofumi
File MIME type: text/x-chdr
File size: 1100 byte(s)
adjust tab index
| 1 |
#ifndef MOVING_AVERAGE_H |
| 2 |
#define MOVING_AVERAGE_H |
| 3 |
|
| 4 |
/*! |
| 5 |
\file |
| 6 |
\brief 移動平均の計算 |
| 7 |
|
| 8 |
\author Satofumi KAMIMURA |
| 9 |
|
| 10 |
$Id$ |
| 11 |
*/ |
| 12 |
|
| 13 |
namespace beego { |
| 14 |
/*! |
| 15 |
\brief 移動平均のテンプレート |
| 16 |
*/ |
| 17 |
template<class T> class MovingAverage { |
| 18 |
MovingAverage(const MovingAverage& rhs); |
| 19 |
MovingAverage& operator = (const MovingAverage& rhs); |
| 20 |
|
| 21 |
std::deque<T> buffer; |
| 22 |
size_t buffer_size; |
| 23 |
T average; |
| 24 |
T total; |
| 25 |
|
| 26 |
void buffer_set(size_t size, T value) { |
| 27 |
buffer.assign(size, value); |
| 28 |
average = value; |
| 29 |
total = average * size; |
| 30 |
} |
| 31 |
|
| 32 |
public: |
| 33 |
MovingAverage(size_t size) : buffer_size(size), total(0) { |
| 34 |
if (size == 0) { |
| 35 |
buffer_size = 1; |
| 36 |
} |
| 37 |
buffer_set(buffer_size, 0); |
| 38 |
} |
| 39 |
|
| 40 |
void setAverageValue(T value) { |
| 41 |
buffer_set(buffer_size, value); |
| 42 |
} |
| 43 |
|
| 44 |
T getAverage(void) { |
| 45 |
return average; |
| 46 |
} |
| 47 |
|
| 48 |
void push_back(T value) { |
| 49 |
|
| 50 |
total -= buffer.front(); |
| 51 |
buffer.pop_front(); |
| 52 |
total += value; |
| 53 |
buffer.push_back(value); |
| 54 |
|
| 55 |
average = total / static_cast<T>(buffer_size); |
| 56 |
} |
| 57 |
}; |
| 58 |
}; |
| 59 |
|
| 60 |
#endif /* !MOVING_AVERAGE_H */ |
|