diff --git a/stepmania/src/LuaManager.h b/stepmania/src/LuaManager.h index ce9457f7e0..c5da270445 100644 --- a/stepmania/src/LuaManager.h +++ b/stepmania/src/LuaManager.h @@ -26,26 +26,6 @@ namespace LuaHelpers bool FromStack( int &Object, int iOffset, lua_State *L ); bool FromStack( void *&Object, int iOffset, lua_State *L ); bool FromStack( CString &Object, int iOffset, lua_State *L ); - - template - void ReadArrayFromTable( vector aOut, lua_State *L ) - { - if( L == NULL ) - L = LUA->L; - - luaL_checktype( L, -1, LUA_TTABLE ); - - unsigned iCount = luaL_getn( L, -1 ); - - for( unsigned i = 0; i < iCount; ++i ) - { - lua_rawgeti( L, -1, i+1 ); - T value = T(); - LuaHelpers::FromStack( value, -1, L ); - aOut.push_back( value ); - lua_pop( L, 1 ); - } - } }; class LuaManager @@ -93,23 +73,7 @@ public: void PushStackNil(); void PushNopFunction(); - template - static void PushStack( const T &val, lua_State *L = NULL ) - { - if( L == NULL ) - L = LUA->L; - LuaHelpers::Push( val, L ); - } - template - static bool PopStack( T &val, lua_State *L = NULL ) - { - if( L == NULL ) - L = LUA->L; - bool bRet = LuaHelpers::FromStack( val, -1, L ); - lua_pop( L, 1 ); - return bRet; - } bool GetStack( int pos, int &out ); void SetGlobal( const CString &sName ); @@ -120,8 +84,55 @@ public: static void ReadArrayFromTableB( vector &aOut, lua_State *L = NULL ); lua_State *L; + template + static void PushStack( const T &val, lua_State *L = NULL ); + + template + static bool PopStack( T &val, lua_State *L = NULL ); }; +namespace LuaHelpers +{ + template + void ReadArrayFromTable( vector aOut, lua_State *L ) + { + if( L == NULL ) + L = LUA->L; + + luaL_checktype( L, -1, LUA_TTABLE ); + + unsigned iCount = luaL_getn( L, -1 ); + + for( unsigned i = 0; i < iCount; ++i ) + { + lua_rawgeti( L, -1, i+1 ); + T value = T(); + LuaHelpers::FromStack( value, -1, L ); + aOut.push_back( value ); + lua_pop( L, 1 ); + } + } +} + +template +void LuaManager::PushStack( const T &val, lua_State *L) +{ + if( L == NULL ) + L = LUA->L; + LuaHelpers::Push( val, L ); +} + +template +bool LuaManager::PopStack( T &val, lua_State *L) +{ + if( L == NULL ) + L = LUA->L; + bool bRet = LuaHelpers::FromStack( val, -1, L ); + lua_pop( L, 1 ); + return bRet; +} + + template void CreateTableFromArray( const vector &aIn, lua_State *L ) { diff --git a/stepmania/src/MessageManager.h b/stepmania/src/MessageManager.h index 2d47f698d2..a78686e414 100644 --- a/stepmania/src/MessageManager.h +++ b/stepmania/src/MessageManager.h @@ -31,6 +31,29 @@ enum Message }; const CString& MessageToString( Message m ); +class MessageManager +{ +public: + MessageManager(); + ~MessageManager(); + + void Subscribe( IMessageSubscriber* pSubscriber, const CString& sMessage ); + void Subscribe( IMessageSubscriber* pSubscriber, Message m ); + void Unsubscribe( IMessageSubscriber* pSubscriber, const CString& sMessage ); + void Unsubscribe( IMessageSubscriber* pSubscriber, Message m ); + void Broadcast( const CString& sMessage ) const; + void Broadcast( Message m ) const; + + // Lua + void PushSelf( lua_State *L ); + +private: + typedef set SubscribersSet; + map m_MessageToSubscribers; +}; + +extern MessageManager* MESSAGEMAN; // global and accessable from anywhere in our program + template class BroadcastOnChange { @@ -91,30 +114,6 @@ public: BroadcastOnChangePtr& operator[]( unsigned i ) { return val[i]; } }; -class MessageManager -{ -public: - MessageManager(); - ~MessageManager(); - - void Subscribe( IMessageSubscriber* pSubscriber, const CString& sMessage ); - void Subscribe( IMessageSubscriber* pSubscriber, Message m ); - void Unsubscribe( IMessageSubscriber* pSubscriber, const CString& sMessage ); - void Unsubscribe( IMessageSubscriber* pSubscriber, Message m ); - void Broadcast( const CString& sMessage ) const; - void Broadcast( Message m ) const; - - // Lua - void PushSelf( lua_State *L ); - -private: - typedef set SubscribersSet; - map m_MessageToSubscribers; -}; - - -extern MessageManager* MESSAGEMAN; // global and accessable from anywhere in our program - #endif /*