sampler.hpp
Go to the documentation of this file.
1 /*
2  * SocialLedge.com - Copyright (C) 2013
3  *
4  * This file is part of free software framework for embedded processors.
5  * You can use it and/or distribute it as long as this copyright header
6  * remains unmodified. The code is free for personal use and requires
7  * permission to use in a commercial product.
8  *
9  * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED
10  * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
11  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
12  * I SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR
13  * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
14  *
15  * You can reach the author of this software at :
16  * p r e e t . w i k i @ g m a i l . c o m
17  */
18 
19 #ifndef SAMPLER_HPP_
20 #define SAMPLER_HPP_
21 
34 template <typename TYPE>
35 class Sampler
36 {
37  public:
38  Sampler(int numSamples) : mSampleArraySize(numSamples), mSampleIndex(0), mAllSamplesReady(false)
39  {
40  mSamples = new TYPE[numSamples];
41  for(int i=0; i < numSamples; i++) {
42  mSamples[i] = 0;
43  }
44  }
45 
47  {
48  delete [] mSamples;
49  }
50 
51  void storeSample(const TYPE& sample)
52  {
53  mSamples[mSampleIndex] = sample;
54  if(++mSampleIndex >= mSampleArraySize) {
55  mSampleIndex = 0;
56  mAllSamplesReady = true;
57  }
58  }
59 
60  TYPE getAverage(void) const
61  {
62  const int numSamples = mAllSamplesReady ? mSampleArraySize : mSampleIndex;
63  TYPE sum = 0;
64 
65  for(int i=0; i < numSamples; i++) {
66  sum += mSamples[i];
67  }
68 
69  return (sum / numSamples);
70  }
71 
72  TYPE getLatest(void) const
73  {
74  int idx = (0 == mSampleIndex) ? (mSampleArraySize - 1) : (mSampleIndex - 1);
75  return mSamples[idx];
76  }
77 
78  TYPE getHighest(void) const
79  {
80  const int numSamples = mAllSamplesReady ? mSampleArraySize : mSampleIndex;
81  TYPE highest = mSamples[0];
82 
83  for(int i=0; i < numSamples; i++) {
84  if (highest < mSamples[i]) {
85  highest = mSamples[i];
86  }
87  }
88 
89  return highest;
90  }
91 
92  TYPE getLowest(void) const
93  {
94  const int numSamples = mAllSamplesReady ? mSampleArraySize : mSampleIndex;
95  TYPE lowest = mSamples[0];
96 
97  for(int i=0; i < numSamples; i++) {
98  if (lowest > mSamples[i]) {
99  lowest = mSamples[i];
100  }
101  }
102 
103  return lowest;
104  }
105 
106  inline bool allSamplesReady(void) const { return mAllSamplesReady; }
107  inline int getMaxSampleCount(void) const { return mSampleArraySize; }
108  inline int getSampleCount(void) const { return mAllSamplesReady ? mSampleArraySize : mSampleIndex; }
109  inline TYPE getSampleNum(int idx) const { return idx < mSampleArraySize ? mSamples[idx] : 0; }
110 
111  void clear(void)
112  {
113  mAllSamplesReady = false;
114  mSampleIndex = 0;
115  }
116 
117  private:
119  Sampler() :
120  mSampleArraySize(0), mSampleIndex(0),
121  mAllSamplesReady(false), mSamples(0)
122  {
123  }
124 
125  const int mSampleArraySize;
126  int mSampleIndex;
127  bool mAllSamplesReady;
128  TYPE* mSamples;
129 };
130 
131 #endif /* SAMPLER_HPP_ */
~Sampler()
Definition: sampler.hpp:46
void storeSample(const TYPE &sample)
Definition: sampler.hpp:51
Definition: sampler.hpp:35
int getMaxSampleCount(void) const
Definition: sampler.hpp:107
TYPE getAverage(void) const
Definition: sampler.hpp:60
TYPE getLatest(void) const
Definition: sampler.hpp:72
TYPE getHighest(void) const
Definition: sampler.hpp:78
bool allSamplesReady(void) const
Definition: sampler.hpp:106
TYPE getSampleNum(int idx) const
Definition: sampler.hpp:109
int getSampleCount(void) const
Definition: sampler.hpp:108
TYPE getLowest(void) const
Definition: sampler.hpp:92
Sampler(int numSamples)
Definition: sampler.hpp:38
void clear(void)
Definition: sampler.hpp:111