Sirikata
|
00001 // Copyright (c) 2011 Sirikata Authors. All rights reserved. 00002 // Use of this source code is governed by a BSD-style license that can 00003 // be found in the LICENSE file. 00004 00005 #ifndef _SIRIKATA_CORE_TRACE_WINDOWED_STATS_HPP_ 00006 #define _SIRIKATA_CORE_TRACE_WINDOWED_STATS_HPP_ 00007 00008 #include <sirikata/core/util/CircularBuffer.hpp> 00009 00010 namespace Sirikata { 00011 namespace Trace { 00012 00017 template<typename SampleType> 00018 class WindowedStats { 00019 public: 00020 WindowedStats(std::size_t nsamples) 00021 : mSamples(nsamples) 00022 { 00023 } 00024 00026 void sample(const SampleType& s) { 00027 mSamples.push(s); 00028 } 00029 00030 SampleType average() const { 00031 SampleType sum; 00032 if (mSamples.empty()) return sum; 00033 for(std::size_t i = 0; i < mSamples.size(); i++) 00034 sum = sum + mSamples[i]; 00035 return sum / mSamples.size(); 00036 } 00037 00038 const CircularBuffer<SampleType>& getSamples() const 00039 { 00040 return mSamples; 00041 } 00042 00043 private: 00044 CircularBuffer<SampleType> mSamples; 00045 }; // class RecentStats 00046 00047 } // namespace Trace 00048 } // namespace Sirikata 00049 00050 #endif //_SIRIKATA_CORE_TRACE_WINDOWED_STATS_HPP_