Sirikata
libcore/include/sirikata/core/trace/WindowedStats.hpp
Go to the documentation of this file.
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_