blob: d211d37d3cc3d7da0a49a256688200bf0906ed60 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: Makes enum-to-string and string-to-enum easier to declare
//
// $NoKeywords: $
//=============================================================================
#ifndef GCENUMUTILS_H
#define GCENUMUTILS_H
#ifdef _WIN32
#pragma once
#endif
namespace GCSDK
{
struct EnumString_s
{
int nValue;
const char *pszString;
};
}
// starts defining a enum value string map
#define ENUMSTRINGS_START( etype ) static const GCSDK::EnumString_s s_##etype[] = {
// ends defining a enum value string map. generates PchNameFromEnumName()
#define ENUMSTRINGS_END( etype ) }; const char* PchNameFrom##etype( etype nValue ) \
{ for( uint i=0; i<Q_ARRAYSIZE(s_##etype); i++ ) { if ( s_##etype[i].nValue == nValue ) return s_##etype[i].pszString; } \
AssertMsg2( false, "Missing String for %s (%d)", #etype, nValue ); return "Unknown"; } \
const char* PchNameFrom##etype##Unsafe( etype nValue ) \
{ for( uint i=0; i<Q_ARRAYSIZE(s_##etype); i++ ) { if ( s_##etype[i].nValue == nValue ) return s_##etype[i].pszString; } \
return NULL; }
// ends defining a enum value string map. generates PchNameFromEnum() and EnumFromNam(). Invalid element must be first in array
#define ENUMSTRINGS_REVERSE( etype, default ) }; const char* PchNameFrom##etype(etype nValue ) \
{ for( uint i=0; i<Q_ARRAYSIZE(s_##etype); i++ ) { if ( s_##etype[i].nValue == nValue ) return s_##etype[i].pszString; } \
AssertMsg2( false, "Missing String for %s (%d)", #etype, nValue ); return "Unknown"; }; \
etype etype##FromName( const char *pchName ) \
{ for( uint i=0; i<Q_ARRAYSIZE(s_##etype); i++ ) { if ( !Q_stricmp( s_##etype[i].pszString, pchName ) ) return (etype)(s_##etype[i].nValue); } \
return default; }
#endif // GCENUMUTILS_H
|