diff options
Diffstat (limited to 'public/tier1/utlflags.h')
| -rw-r--r-- | public/tier1/utlflags.h | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/public/tier1/utlflags.h b/public/tier1/utlflags.h new file mode 100644 index 0000000..e225b43 --- /dev/null +++ b/public/tier1/utlflags.h @@ -0,0 +1,124 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: Simple class to make it easier to deal with flags +// +//============================================================================= + +#ifndef UTLFLAGS_H +#define UTLFLAGS_H +#ifdef _WIN32 +#pragma once +#endif + +#include "tier0/dbg.h" + + +//----------------------------------------------------------------------------- +// Simple class to make it easier to deal with flags +//----------------------------------------------------------------------------- +template< class T > +class CUtlFlags +{ +public: + CUtlFlags( int nInitialFlags = 0 ); + + // Flag setting + void SetFlag( int nFlagMask ); + void SetFlag( int nFlagMask, bool bEnable ); + + // Flag clearing + void ClearFlag( int nFlagMask ); + void ClearAllFlags(); + bool IsFlagSet( int nFlagMask ) const; + + // Is any flag set? + bool IsAnyFlagSet() const; + +private: + T m_nFlags; +}; + + +//----------------------------------------------------------------------------- +// Constructor +//----------------------------------------------------------------------------- +template< class T > +CUtlFlags<T>::CUtlFlags( int nInitialFlags ) +{ + // Makes sure we didn't truncate + Assert( nInitialFlags == (T)nInitialFlags ); + + m_nFlags = (T)nInitialFlags; +} + + +//----------------------------------------------------------------------------- +// Set flags +//----------------------------------------------------------------------------- +template< class T > +void CUtlFlags<T>::SetFlag( int nFlagMask ) +{ + // Makes sure we didn't truncate + Assert( nFlagMask == (T)nFlagMask ); + + m_nFlags |= (T)nFlagMask; +} + +template< class T > +void CUtlFlags<T>::SetFlag( int nFlagMask, bool bEnable ) +{ + // Makes sure we didn't truncate + Assert( nFlagMask == (T)nFlagMask ); + + if ( bEnable ) + { + m_nFlags |= (T)nFlagMask; + } + else + { + m_nFlags &= ~((T)nFlagMask); + } +} + + +//----------------------------------------------------------------------------- +// Clear flags +//----------------------------------------------------------------------------- +template< class T > +void CUtlFlags<T>::ClearFlag( int nFlagMask ) +{ + // Makes sure we didn't truncate + Assert( nFlagMask == (T)nFlagMask ); + m_nFlags &= ~((T)nFlagMask); +} + +template< class T > +void CUtlFlags<T>::ClearAllFlags() +{ + m_nFlags = 0; +} + + +//----------------------------------------------------------------------------- +// Is a flag set? +//----------------------------------------------------------------------------- +template< class T > +bool CUtlFlags<T>::IsFlagSet( int nFlagMask ) const +{ + // Makes sure we didn't truncate + Assert( nFlagMask == (T)nFlagMask ); + return ( m_nFlags & nFlagMask ) != 0; +} + + +//----------------------------------------------------------------------------- +// Is any flag set? +//----------------------------------------------------------------------------- +template< class T > +bool CUtlFlags<T>::IsAnyFlagSet() const +{ + return m_nFlags != 0; +} + + +#endif // UTLFLAGS_H |