From b688bff51d5ce65418ee79247b575590ea7d2af1 Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Mon, 21 Feb 2005 06:51:10 +0000 Subject: [PATCH] add pushing to vectors with any type --- stepmania/src/LuaManager.cpp | 4 ++-- stepmania/src/LuaManager.h | 18 ++++++++++++++++-- stepmania/src/ScreenOptionsMaster.cpp | 6 +++--- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/stepmania/src/LuaManager.cpp b/stepmania/src/LuaManager.cpp index 540af04fdd..4c272738be 100644 --- a/stepmania/src/LuaManager.cpp +++ b/stepmania/src/LuaManager.cpp @@ -104,7 +104,7 @@ void LuaManager::PushStack( const CString &out, lua_State *L ) lua_pushstring( L, out ); } -void LuaManager::CreateTableFromArray( const vector &aIn, lua_State *L ) +void LuaManager::CreateTableFromArrayB( const vector &aIn, lua_State *L ) { if( L == NULL ) L = LUA->L; @@ -117,7 +117,7 @@ void LuaManager::CreateTableFromArray( const vector &aIn, lua_State *L ) } } -void LuaManager::ReadArrayFromTable( vector &aOut, lua_State *L ) +void LuaManager::ReadArrayFromTableB( vector &aOut, lua_State *L ) { if( L == NULL ) L = LUA->L; diff --git a/stepmania/src/LuaManager.h b/stepmania/src/LuaManager.h index 131a22250a..7bdf77728b 100644 --- a/stepmania/src/LuaManager.h +++ b/stepmania/src/LuaManager.h @@ -61,13 +61,27 @@ public: /* Create a Lua array (a table with indices starting at 1) of the given vector, * and push it on the stack. */ - static void CreateTableFromArray( const vector &aIn, lua_State *L = NULL ); + static void CreateTableFromArrayB( const vector &aIn, lua_State *L = NULL ); /* Read the table at the top of the stack back into a vector. */ - static void ReadArrayFromTable( vector &aOut, lua_State *L = NULL ); + static void ReadArrayFromTableB( vector &aOut, lua_State *L = NULL ); lua_State *L; }; + template + void CreateTableFromArray( const vector &aIn, lua_State *L ) + { + if( L == NULL ) + L = LUA->L; + + lua_newtable( L ); + for( unsigned i = 0; i < aIn.size(); ++i ) + { + aIn[i]->PushSelf( L ); + lua_rawseti( L, -2, i+1 ); + } + } + extern LuaManager *LUA; #define REGISTER_WITH_LUA_FUNCTION( Fn ) \ diff --git a/stepmania/src/ScreenOptionsMaster.cpp b/stepmania/src/ScreenOptionsMaster.cpp index ea3d0f03c3..16dfdc4e79 100644 --- a/stepmania/src/ScreenOptionsMaster.cpp +++ b/stepmania/src/ScreenOptionsMaster.cpp @@ -612,7 +612,7 @@ void ScreenOptionsMaster::ImportOption( const OptionRowDefinition &row, const Op vbSelectedOut[i] = false; /* Create the vbSelectedOut table. */ - LUA->CreateTableFromArray( vbSelectedOut ); + LUA->CreateTableFromArrayB( vbSelectedOut ); ASSERT( lua_gettop(LUA->L) == 1 ); /* vbSelectedOut table */ /* Get the function to call from m_LuaTable. */ @@ -640,7 +640,7 @@ void ScreenOptionsMaster::ImportOption( const OptionRowDefinition &row, const Op lua_pop( LUA->L, 1 ); /* pop option table */ - LUA->ReadArrayFromTable( vbSelectedOut ); + LUA->ReadArrayFromTableB( vbSelectedOut ); if( m_OptionsNavigation == NAV_TOGGLE_THREE_KEY ) vbSelectedOut.insert( vbSelectedOut.begin(), false ); @@ -751,7 +751,7 @@ int ScreenOptionsMaster::ExportOption( const OptionRowDefinition &row, const Opt vbSelectedCopy.erase( vbSelectedCopy.begin() ); /* Create the vbSelectedOut table. */ - LUA->CreateTableFromArray( vbSelectedCopy ); + LUA->CreateTableFromArrayB( vbSelectedCopy ); ASSERT( lua_gettop(LUA->L) == 1 ); /* vbSelectedOut table */ /* Get the function to call. */