00001 #ifndef CAJUN_RUNNING_AVERAGE_H 00002 #define CAJUN_RUNNING_AVERAGE_H 00003 00004 #include <deque> 00005 00006 class running_average_t 00007 { 00008 private: 00009 unsigned m_max_size; 00010 double m_average_value; 00011 //todo: probably update using template data_type 00012 std::deque<double > m_list; 00013 public: 00014 running_average_t (unsigned max_size_) 00015 { 00016 m_max_size = max_size_; 00017 m_average_value = 0; 00018 } 00019 00020 void add_value (double delay_) 00021 { 00022 if (m_list.size () >= m_max_size) 00023 m_list.pop_front (); 00024 m_list.push_back (delay_); 00025 //todo: optimize the way average is calculated 00026 double sum = 0; 00027 for (unsigned i=0; i< m_list.size (); i++) 00028 sum+= m_list[i]; 00029 m_average_value = sum / m_list.size (); 00030 } 00031 double get_average () 00032 { 00033 return m_average_value; 00034 } 00035 00036 }; 00037 00038 #endif