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 */