From b0b87501ebce3981650c7b7d8d7059516e587e8d Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Sun, 19 Jun 2011 20:19:09 -0400 Subject: [PATCH] More scrolling friendliness. Fair warning: mass recompile of many files. --- src/EnumHelper.h | 94 +++++++++++++++++++++++++++++++----------------- 1 file changed, 62 insertions(+), 32 deletions(-) diff --git a/src/EnumHelper.h b/src/EnumHelper.h index 3f9c60c295..dc1049cc0c 100644 --- a/src/EnumHelper.h +++ b/src/EnumHelper.h @@ -15,7 +15,12 @@ extern "C" /** @brief A general foreach loop for enumerators. */ #define FOREACH_ENUM( e, var ) for( e var=(e)0; var( var, +1 ) ) -int CheckEnum( lua_State *L, LuaReference &table, int iPos, int iInvalid, const char *szType, bool bAllowInvalid ); +int CheckEnum(lua_State *L, + LuaReference &table, + int iPos, + int iInvalid, + const char *szType, + bool bAllowInvalid); template struct EnumTraits @@ -33,7 +38,12 @@ namespace Enum template static T Check( lua_State *L, int iPos, bool bAllowInvalid = false ) { - return (T) CheckEnum( L, EnumTraits::StringToEnum, iPos, EnumTraits::Invalid, EnumTraits::szName, bAllowInvalid ); + return (T) CheckEnum(L, + EnumTraits::StringToEnum, + iPos, + EnumTraits::Invalid, + EnumTraits::szName, + bAllowInvalid); } template static void Push( lua_State *L, T iVal ) @@ -57,40 +67,47 @@ namespace Enum const RString &EnumToString( int iVal, int iMax, const char **szNameArray, auto_ptr *pNameCache ); // XToString helper #define XToString(X) \ - const RString& X##ToString(X x); \ - COMPILE_ASSERT( NUM_##X == ARRAYLEN(X##Names) ); \ - const RString& X##ToString( X x ) \ - { \ - static auto_ptr as_##X##Name[NUM_##X+2]; \ - return EnumToString( x, NUM_##X, X##Names, as_##X##Name ); \ - } \ - namespace StringConversion { template<> RString ToString( const X &value ) { return X##ToString(value); } } +const RString& X##ToString(X x); \ +COMPILE_ASSERT( NUM_##X == ARRAYLEN(X##Names) ); \ +const RString& X##ToString( X x ) \ +{ \ + static auto_ptr as_##X##Name[NUM_##X+2]; \ + return EnumToString( x, NUM_##X, X##Names, as_##X##Name ); \ +} \ +namespace StringConversion { template<> RString ToString( const X &value ) { return X##ToString(value); } } #define XToLocalizedString(X) \ - const RString &X##ToLocalizedString(X x); \ - const RString &X##ToLocalizedString( X x ) \ - { \ - static auto_ptr g_##X##Name[NUM_##X]; \ - if( g_##X##Name[0].get() == NULL ) { \ - for( unsigned i = 0; i < NUM_##X; ++i ) \ - { \ - auto_ptr ap( new LocalizedString(#X, X##ToString((X)i)) ); \ - g_##X##Name[i] = ap; \ - } \ +const RString &X##ToLocalizedString(X x); \ +const RString &X##ToLocalizedString( X x ) \ +{ \ + static auto_ptr g_##X##Name[NUM_##X]; \ + if( g_##X##Name[0].get() == NULL ) { \ + for( unsigned i = 0; i < NUM_##X; ++i ) \ + { \ + auto_ptr ap( new LocalizedString(#X, X##ToString((X)i)) ); \ + g_##X##Name[i] = ap; \ } \ - return g_##X##Name[x]->GetValue(); \ - } + } \ + return g_##X##Name[x]->GetValue(); \ +} #define StringToX(X) \ - X StringTo##X(const RString&); \ - X StringTo##X( const RString& s ) \ - { \ - for( unsigned i = 0; i < ARRAYLEN(X##Names); ++i ) \ - if( !s.CompareNoCase(X##Names[i]) ) \ - return (X)i; \ - return X##_Invalid; \ +X StringTo##X(const RString&); \ +X StringTo##X( const RString& s ) \ +{ \ + for( unsigned i = 0; i < ARRAYLEN(X##Names); ++i ) \ + if( !s.CompareNoCase(X##Names[i]) ) \ + return (X)i; \ + return X##_Invalid; \ +} \ +namespace StringConversion \ +{ \ + template<> bool FromString( const RString &sValue, X &out ) \ + { \ + out = StringTo##X(sValue); \ + return out != X##_Invalid; \ } \ - namespace StringConversion { template<> bool FromString( const RString &sValue, X &out ) { out = StringTo##X(sValue); return out != X##_Invalid; } } +} // currently unused #define LuaDeclareType(X) @@ -126,8 +143,21 @@ static void Lua##X(lua_State* L) \ REGISTER_WITH_LUA_FUNCTION( Lua##X ); \ template<> X EnumTraits::Invalid = X##_Invalid; \ template<> const char *EnumTraits::szName = #X; \ -namespace LuaHelpers { template<> bool FromStack( lua_State *L, X &Object, int iOffset ) { Object = Enum::Check( L, iOffset, true ); return Object != EnumTraits::Invalid; } } \ -namespace LuaHelpers { template<> void Push( lua_State *L, const X &Object ) { Enum::Push( L, Object ); } } +namespace LuaHelpers \ +{ \ + template<> bool FromStack( lua_State *L, X &Object, int iOffset ) \ + { \ + Object = Enum::Check( L, iOffset, true ); \ + return Object != EnumTraits::Invalid; \ + } \ +} \ +namespace LuaHelpers \ +{ \ + template<> void Push( lua_State *L, const X &Object ) \ + { \ + Enum::Push( L, Object ); \ + } \ +} #endif