diff options
| author | Jørgen P. Tjernø <[email protected]> | 2013-12-02 19:31:46 -0800 |
|---|---|---|
| committer | Jørgen P. Tjernø <[email protected]> | 2013-12-02 19:46:31 -0800 |
| commit | f56bb35301836e56582a575a75864392a0177875 (patch) | |
| tree | de61ddd39de3e7df52759711950b4c288592f0dc /sp/src/public/tier1/utlmovingaverage.h | |
| parent | Mark some more files as text. (diff) | |
| download | source-sdk-2013-f56bb35301836e56582a575a75864392a0177875.tar.xz source-sdk-2013-f56bb35301836e56582a575a75864392a0177875.zip | |
Fix line endings. WHAMMY.
Diffstat (limited to 'sp/src/public/tier1/utlmovingaverage.h')
| -rw-r--r-- | sp/src/public/tier1/utlmovingaverage.h | 206 |
1 files changed, 103 insertions, 103 deletions
diff --git a/sp/src/public/tier1/utlmovingaverage.h b/sp/src/public/tier1/utlmovingaverage.h index 997b07c9..b91ccb60 100644 --- a/sp/src/public/tier1/utlmovingaverage.h +++ b/sp/src/public/tier1/utlmovingaverage.h @@ -1,103 +1,103 @@ -//========= Copyright Valve Corporation, All rights reserved. ============//
-//
-// Purpose: Simple moving average class
-//
-// $NoKeywords: $
-//
-//
-//=============================================================================//
-#ifndef MOVING_AVERAGE_H
-#define MOVING_AVERAGE_H
-
-#ifdef _WIN32
-#pragma once
-#endif
-
-#include "tier0/platform.h"
-#include "tier0/basetypes.h"
-
-template<uint32 TBufferSize> class CUtlMovingAverage
-{
-public:
- CUtlMovingAverage() :
- m_nValuesPushed( 0 ),
- m_flTotal( 0.0f )
- {
- }
-
- void Reset()
- {
- m_nValuesPushed = 0;
- m_flTotal = 0.0f;
- }
-
- uint32 GetTotalValuesPushed() const
- {
- return m_nValuesPushed;
- }
-
- float GetAverage( )
- {
- uint n = MIN( TBufferSize, m_nValuesPushed );
- return n ? ( m_flTotal / static_cast<double>( n ) ) : 0.0f;
- }
-
- void GetAverageAndAbsRange( float *pflOutAverage, float *pflOutAbsRange, float *pflMinTime, float *pflMaxTime )
- {
- if ( m_nValuesPushed == 0 )
- {
- *pflOutAverage = 0;
- *pflOutAbsRange = 0;
- *pflMinTime = 0;
- *pflMaxTime = 0;
- return;
- }
-
- *pflOutAverage = GetAverage();
-
- const int nNumValues = MIN( m_nValuesPushed, TBufferSize );
-
- float flAbsRange = 0;
- float flMinTime = 9e+9;
- float flMaxTime = 0;
-
- for ( int i = 0; i < nNumValues; ++i )
- {
- float flDif = ( m_Buffer[i] - *pflOutAverage );
- flAbsRange = MAX( flAbsRange, abs( flDif ) );
- flMinTime = MIN( flMinTime, m_Buffer[i] );
- flMaxTime = MAX( flMaxTime, m_Buffer[i] );
- }
-
- *pflOutAbsRange = flAbsRange;
- *pflMinTime = flMinTime;
- *pflMaxTime = flMaxTime;
- }
-
- void PushValue( float v )
- {
- uint nIndex = m_nValuesPushed % TBufferSize;
-
- if ( m_nValuesPushed >= TBufferSize )
- {
- m_flTotal = MAX( m_flTotal - m_Buffer[nIndex], 0.0f );
- }
- m_flTotal += v;
-
- m_Buffer[nIndex] = v;
- m_nValuesPushed++;
-
- if ( UINT_MAX == m_nValuesPushed )
- {
- Reset();
- }
- }
-
-private:
- float m_Buffer[TBufferSize];
- uint32 m_nValuesPushed;
-
- double m_flTotal;
-};
-
-#endif // MOVING_AVERAGE_H
+//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: Simple moving average class +// +// $NoKeywords: $ +// +// +//=============================================================================// +#ifndef MOVING_AVERAGE_H +#define MOVING_AVERAGE_H + +#ifdef _WIN32 +#pragma once +#endif + +#include "tier0/platform.h" +#include "tier0/basetypes.h" + +template<uint32 TBufferSize> class CUtlMovingAverage +{ +public: + CUtlMovingAverage() : + m_nValuesPushed( 0 ), + m_flTotal( 0.0f ) + { + } + + void Reset() + { + m_nValuesPushed = 0; + m_flTotal = 0.0f; + } + + uint32 GetTotalValuesPushed() const + { + return m_nValuesPushed; + } + + float GetAverage( ) + { + uint n = MIN( TBufferSize, m_nValuesPushed ); + return n ? ( m_flTotal / static_cast<double>( n ) ) : 0.0f; + } + + void GetAverageAndAbsRange( float *pflOutAverage, float *pflOutAbsRange, float *pflMinTime, float *pflMaxTime ) + { + if ( m_nValuesPushed == 0 ) + { + *pflOutAverage = 0; + *pflOutAbsRange = 0; + *pflMinTime = 0; + *pflMaxTime = 0; + return; + } + + *pflOutAverage = GetAverage(); + + const int nNumValues = MIN( m_nValuesPushed, TBufferSize ); + + float flAbsRange = 0; + float flMinTime = 9e+9; + float flMaxTime = 0; + + for ( int i = 0; i < nNumValues; ++i ) + { + float flDif = ( m_Buffer[i] - *pflOutAverage ); + flAbsRange = MAX( flAbsRange, abs( flDif ) ); + flMinTime = MIN( flMinTime, m_Buffer[i] ); + flMaxTime = MAX( flMaxTime, m_Buffer[i] ); + } + + *pflOutAbsRange = flAbsRange; + *pflMinTime = flMinTime; + *pflMaxTime = flMaxTime; + } + + void PushValue( float v ) + { + uint nIndex = m_nValuesPushed % TBufferSize; + + if ( m_nValuesPushed >= TBufferSize ) + { + m_flTotal = MAX( m_flTotal - m_Buffer[nIndex], 0.0f ); + } + m_flTotal += v; + + m_Buffer[nIndex] = v; + m_nValuesPushed++; + + if ( UINT_MAX == m_nValuesPushed ) + { + Reset(); + } + } + +private: + float m_Buffer[TBufferSize]; + uint32 m_nValuesPushed; + + double m_flTotal; +}; + +#endif // MOVING_AVERAGE_H |