This repository has been archived on 2024-06-13. You can view files and clone it, but cannot push or open issues or pull requests.
2020-08-04 13:13:01 -04:00

107 lines
2.9 KiB
C++

//========= 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