@@ -1265,10 +1265,6 @@ namespace SharedUtil
1265
1265
//
1266
1266
// enum reflection shenanigans
1267
1267
//
1268
- enum eDummy
1269
- {
1270
- };
1271
-
1272
1268
template <class T >
1273
1269
struct CEnumInfo
1274
1270
{
@@ -1278,31 +1274,31 @@ namespace SharedUtil
1278
1274
const char * szName;
1279
1275
};
1280
1276
1281
- CEnumInfo (const SString& strTypeName, const SEnumItem* pItemList, uint uiAmount, eDummy defaultValue, const SString& strDefaultName)
1277
+ CEnumInfo (const SString& strTypeName, const SEnumItem* pItemList, uint uiAmount, T defaultValue, const SString& strDefaultName)
1282
1278
{
1283
1279
m_strTypeName = strTypeName;
1284
1280
m_strDefaultName = strDefaultName;
1285
1281
m_DefaultValue = defaultValue;
1286
1282
for (uint i = 0 ; i < uiAmount; i++)
1287
1283
{
1288
1284
const SEnumItem& item = pItemList[i];
1289
- m_ValueMap[item.szName ] = (eDummy) item.iValue ;
1290
- m_NameMap[(eDummy) item.iValue ] = item.szName ;
1285
+ m_ValueMap[item.szName ] = item.iValue ;
1286
+ m_NameMap[item.iValue ] = item.szName ;
1291
1287
}
1292
1288
}
1293
1289
1294
- bool ValueValid (eDummy value) const { return MapContains (m_NameMap, value); }
1290
+ bool ValueValid (T value) const { return MapContains (m_NameMap, value); }
1295
1291
1296
- const SString& FindName (eDummy value) const
1292
+ const SString& FindName (T value) const
1297
1293
{
1298
1294
if (const SString* pName = MapFind (m_NameMap, value))
1299
1295
return *pName;
1300
1296
return m_strDefaultName;
1301
1297
}
1302
1298
1303
- bool FindValue (const SString& strName, eDummy & outResult) const
1299
+ bool FindValue (const SString& strName, T & outResult) const
1304
1300
{
1305
- const eDummy * pValue;
1301
+ const T * pValue;
1306
1302
if ((pValue = MapFind (m_ValueMap, strName)) || (pValue = MapFind (m_ValueMap, strName.ToLower ())))
1307
1303
{
1308
1304
outResult = *pValue;
@@ -1316,45 +1312,40 @@ namespace SharedUtil
1316
1312
1317
1313
SString m_strTypeName;
1318
1314
SString m_strDefaultName;
1319
- eDummy m_DefaultValue;
1320
- std::map<SString, eDummy> m_ValueMap;
1321
- std::map<eDummy , SString> m_NameMap;
1315
+ T m_DefaultValue;
1316
+ std::map<SString, T> m_ValueMap;
1317
+ std::map<T , SString> m_NameMap;
1322
1318
};
1323
1319
1324
- #define DECLARE_ENUM2 ( T, U ) \
1325
- CEnumInfo<U >* GetEnumInfo ( const T* ); \
1326
- inline const SString& EnumToString ( const T& value ) { return GetEnumInfo ( (T*)0 )->FindName ( (eDummy) value ); }\
1327
- inline bool StringToEnum ( const SString& strName, T& outResult ) { return GetEnumInfo ( (T*)0 )->FindValue ( strName, (eDummy&) outResult ); }\
1320
+ #define DECLARE_ENUM ( T ) \
1321
+ CEnumInfo<T >* GetEnumInfo ( const T* ); \
1322
+ inline const SString& EnumToString ( const T& value ) { return GetEnumInfo ( (T*)0 )->FindName ( value ); }\
1323
+ inline bool StringToEnum ( const SString& strName, T& outResult ) { return GetEnumInfo ( (T*)0 )->FindValue ( strName, outResult ); }\
1328
1324
inline const SString& GetEnumTypeName ( const T& ) { return GetEnumInfo ( (T*)0 )->GetTypeName (); }\
1329
- inline bool EnumValueValid ( const T& value ) { return GetEnumInfo ( (T*)0 )->ValueValid ( (eDummy) value ); }\
1325
+ inline bool EnumValueValid ( const T& value ) { return GetEnumInfo ( (T*)0 )->ValueValid ( value ); }\
1330
1326
1331
- #define IMPLEMENT_ENUM_BEGIN2 ( T, U ) \
1332
- CEnumInfo<U >* GetEnumInfo ( const T* ) \
1327
+ #define IMPLEMENT_ENUM_BEGIN ( T ) \
1328
+ CEnumInfo<T >* GetEnumInfo ( const T* ) \
1333
1329
{ \
1334
- using CEnumInfo = CEnumInfo<U >; \
1330
+ using CEnumInfo = CEnumInfo<T >; \
1335
1331
static const CEnumInfo::SEnumItem items[] = {
1336
1332
1337
1333
#define IMPLEMENT_ENUM_END (name ) \
1338
- IMPLEMENT_ENUM_END_DEFAULTS (name,0 , " " )
1334
+ IMPLEMENT_ENUM_END_DEFAULTS (name, static_cast <std:: remove_reference_t < decltype (std::declval<CEnumInfo::SEnumItem>(). iValue )>>( 0 ), " " )
1339
1335
1340
1336
#define IMPLEMENT_ENUM_END_DEFAULTS (name,defvalue,defname ) \
1341
1337
}; \
1342
- static CEnumInfo info ( name, items, NUMELMS (items),(eDummy)( defvalue),defname ); \
1338
+ static CEnumInfo info (name, items, NUMELMS (items), defvalue, defname ); \
1343
1339
return &info; \
1344
1340
}
1345
1341
1346
1342
#define ADD_ENUM (value,name ) {value, name},
1347
1343
#define ADD_ENUM1 (value ) {value, #value},
1348
1344
1349
- // enum
1350
- #define DECLARE_ENUM (T ) DECLARE_ENUM2(T, int )
1351
- #define IMPLEMENT_ENUM_BEGIN (T ) IMPLEMENT_ENUM_BEGIN2(T, int )
1352
-
1353
1345
// enum class
1354
- #define DECLARE_ENUM_CLASS (T ) DECLARE_ENUM2(T, T)
1355
- #define IMPLEMENT_ENUM_CLASS_BEGIN (T ) IMPLEMENT_ENUM_BEGIN2(T, T)
1346
+ #define DECLARE_ENUM_CLASS (T ) DECLARE_ENUM( T)
1347
+ #define IMPLEMENT_ENUM_CLASS_BEGIN (T ) IMPLEMENT_ENUM_BEGIN( T)
1356
1348
#define IMPLEMENT_ENUM_CLASS_END (name ) IMPLEMENT_ENUM_END(name)
1357
- #define IMPLEMENT_ENUM_CLASS_END_DEFAULTS (name,defvalue,defname ) IMPLEMENT_ENUM_END_DEFAULTS(name,defvalue,defname)
1358
1349
1359
1350
//
1360
1351
// Fast wildcard matching
0 commit comments