Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members | Related Pages

Tools/SlidingAverageValue.cpp

Go to the documentation of this file.
00001 /**
00002  * @file SlidingAverageValue.cpp
00003  *
00004  * Implementation of class SlidingAverageValue
00005  *
00006  * @author Jochen Kerdels
00007  */
00008 
00009 #include "SlidingAverageValue.h"
00010 
00011 
00012 SlidingAverageValue::SlidingAverageValue()
00013 {
00014   reset(maxSlidingRange);
00015 }
00016 
00017 void SlidingAverageValue::reset(int aSize)
00018 {
00019   size = aSize;
00020   if (size > maxSlidingRange)
00021     size = maxSlidingRange;
00022   if (size < 1)
00023     size = 1;
00024 
00025   minIdx        = 0;
00026   maxIdx        = -1;
00027   numOfEntries  = 0;
00028   timeOfLastAdd = -1;
00029   sum           = 0;
00030   trig          = 0;
00031 }
00032 
00033 void SlidingAverageValue::trigger ()
00034 {
00035   ++trig%=100000;
00036 }
00037 
00038 void SlidingAverageValue::add (int value) 
00039 {
00040   if (timeOfLastAdd == trig) {
00041     sum -= buffer[maxIdx];
00042   } else {
00043     timeOfLastAdd = trig;
00044     ++maxIdx %= size;
00045     if ((maxIdx == minIdx) && (numOfEntries > 0)){
00046       sum -= buffer[minIdx];
00047       ++minIdx %= size;
00048     }
00049     else
00050       numOfEntries++;
00051   }
00052   buffer[maxIdx] = value;
00053   sum += buffer[maxIdx];
00054 }
00055 
00056 int SlidingAverageValue::getAverage()
00057 {
00058   if (numOfEntries > 0)
00059     return (sum / numOfEntries);
00060   else
00061     return 0;
00062 }
00063 
00064 int SlidingAverageValue::getLastValue()
00065 {
00066   if (numOfEntries > 0)
00067     return buffer[maxIdx];
00068   else
00069     return 0;
00070 }
00071 
00072 
00073 SlidingAverageValue& SlidingAverageValue::operator=(int aInt)
00074 {
00075   add(aInt);
00076   return *this;
00077 }
00078 
00079 SlidingAverageValue& SlidingAverageValue::operator-=(int aInt)
00080 {
00081   add(buffer[maxIdx]-aInt);
00082   return *this;
00083 }
00084 
00085 SlidingAverageValue& SlidingAverageValue::operator+=(int aInt)
00086 {
00087   add(buffer[maxIdx]+aInt);
00088   return *this;
00089 }
00090 
00091 
00092 
00093 /*
00094  * Change log :
00095  * 
00096  * $Log: SlidingAverageValue.cpp,v $
00097  * Revision 1.1.1.1  2004/05/22 17:35:55  cvsadm
00098  * created new repository GT2004_WM
00099  *
00100  * Revision 1.1  2004/04/08 16:04:06  wachter
00101  * GT04 checkin of Microsoft-Hellounds
00102  *
00103  * Revision 1.1  2004/03/21 04:36:07  pg_joke
00104  * added slidingAverage to OptionRatings,
00105  * added ratingBoost (Hysteresis) to OptionRatings
00106  *
00107  *
00108  */

Generated on Thu Sep 23 19:57:41 2004 for GT2004 by doxygen 1.3.6