fix VC7 template error: move templated methods out of LuaManager

This commit is contained in:
Chris Danford
2005-03-13 00:01:05 +00:00
parent 50196e4a0f
commit 8415b4466d
8 changed files with 45 additions and 43 deletions
+3 -3
View File
@@ -71,7 +71,7 @@ int LuaFunc_##func( lua_State *L ) { \
REQ_ARGS( #func, 1 ); \ REQ_ARGS( #func, 1 ); \
REQ_ARG( #func, 1, string ); \ REQ_ARG( #func, 1, string ); \
CString str; \ CString str; \
LUA->PopStack( str ); \ LuaHelpers::PopStack( str ); \
LUA_RETURN( call, L ); \ LUA_RETURN( call, L ); \
} \ } \
LuaFunction( func ); /* register it */ LuaFunction( func ); /* register it */
@@ -83,8 +83,8 @@ int LuaFunc_##func( lua_State *L ) { \
REQ_ARG( #func, 2, string ); \ REQ_ARG( #func, 2, string ); \
CString str1; \ CString str1; \
CString str2; \ CString str2; \
LUA->PopStack( str2 ); \ LuaHelpers::PopStack( str2 ); \
LUA->PopStack( str1 ); \ LuaHelpers::PopStack( str1 ); \
LUA_RETURN( call, L ); \ LUA_RETURN( call, L ); \
} \ } \
LuaFunction( func ); /* register it */ LuaFunction( func ); /* register it */
+3 -3
View File
@@ -141,7 +141,7 @@ void LuaManager::SetGlobal( const CString &sName )
static int LuaPanic( lua_State *L ) static int LuaPanic( lua_State *L )
{ {
CString sErr; CString sErr;
LUA->PopStack( sErr ); LuaHelpers::PopStack( sErr );
RageException::Throw( "%s", sErr.c_str() ); RageException::Throw( "%s", sErr.c_str() );
} }
@@ -270,7 +270,7 @@ bool LuaManager::RunScript( const CString &sScript, const CString &sName, CStrin
if( ret ) if( ret )
{ {
LuaManager::PopStack( sError ); LuaHelpers::PopStack( sError );
return false; return false;
} }
} }
@@ -280,7 +280,7 @@ bool LuaManager::RunScript( const CString &sScript, const CString &sName, CStrin
int ret = lua_pcall( L, 0, iReturnValues, 0 ); int ret = lua_pcall( L, 0, iReturnValues, 0 );
if( ret ) if( ret )
{ {
LuaManager::PopStack( sError ); LuaHelpers::PopStack( sError );
return false; return false;
} }
} }
+30 -28
View File
@@ -26,6 +26,15 @@ namespace LuaHelpers
bool FromStack( int &Object, int iOffset, lua_State *L ); bool FromStack( int &Object, int iOffset, lua_State *L );
bool FromStack( void *&Object, int iOffset, lua_State *L ); bool FromStack( void *&Object, int iOffset, lua_State *L );
bool FromStack( CString &Object, int iOffset, lua_State *L ); bool FromStack( CString &Object, int iOffset, lua_State *L );
template<class T>
void ReadArrayFromTable( vector<T> aOut, lua_State *L = NULL );
template<class T>
void PushStack( const T &val, lua_State *L = NULL );
template<class T>
bool PopStack( T &val, lua_State *L = NULL );
template<class T>
void CreateTableFromArray( const vector<T> &aIn, lua_State *L = NULL );
}; };
class LuaManager class LuaManager
@@ -67,8 +76,8 @@ public:
void Fail( const CString &err ); void Fail( const CString &err );
void SetGlobal( const CString &sName, int val ) { PushStack(val); SetGlobal( sName ); } void SetGlobal( const CString &sName, int val ) { LuaHelpers::PushStack(val); SetGlobal( sName ); }
void SetGlobal( const CString &sName, bool val ) { PushStack(val); SetGlobal( sName ); } void SetGlobal( const CString &sName, bool val ) { LuaHelpers::PushStack(val); SetGlobal( sName ); }
void UnsetGlobal( const CString &sName ) { PushStackNil(); SetGlobal( sName ); } void UnsetGlobal( const CString &sName ) { PushStackNil(); SetGlobal( sName ); }
void PushStackNil(); void PushStackNil();
@@ -84,13 +93,9 @@ public:
static void ReadArrayFromTableB( vector<bool> &aOut, lua_State *L = NULL ); static void ReadArrayFromTableB( vector<bool> &aOut, lua_State *L = NULL );
lua_State *L; lua_State *L;
template<class T>
static void PushStack( const T &val, lua_State *L = NULL );
template<class T>
static bool PopStack( T &val, lua_State *L = NULL );
}; };
namespace LuaHelpers namespace LuaHelpers
{ {
template<class T> template<class T>
@@ -112,27 +117,22 @@ namespace LuaHelpers
lua_pop( L, 1 ); lua_pop( L, 1 );
} }
} }
} template<class T>
void PushStack( const T &val, lua_State *L )
template<class T> {
void LuaManager::PushStack( const T &val, lua_State *L) if( L == NULL )
{ L = LUA->L;
if( L == NULL ) LuaHelpers::Push( val, L );
L = LUA->L; }
LuaHelpers::Push( val, L ); template<class T>
} bool PopStack( T &val, lua_State *L )
{
template<class T> if( L == NULL )
bool LuaManager::PopStack( T &val, lua_State *L) L = LUA->L;
{ bool bRet = LuaHelpers::FromStack( val, -1, L );
if( L == NULL ) lua_pop( L, 1 );
L = LUA->L; return bRet;
bool bRet = LuaHelpers::FromStack( val, -1, L ); }
lua_pop( L, 1 );
return bRet;
}
template<class T> template<class T>
void CreateTableFromArray( const vector<T> &aIn, lua_State *L ) void CreateTableFromArray( const vector<T> &aIn, lua_State *L )
{ {
@@ -146,6 +146,8 @@ bool LuaManager::PopStack( T &val, lua_State *L)
lua_rawseti( L, -2, i+1 ); lua_rawseti( L, -2, i+1 );
} }
} }
}
#define REGISTER_WITH_LUA_FUNCTION( Fn ) \ #define REGISTER_WITH_LUA_FUNCTION( Fn ) \
class Register##Fn { public: Register##Fn() { LuaManager::Register( Fn ); } }; \ class Register##Fn { public: Register##Fn() { LuaManager::Register( Fn ); } }; \
+2 -2
View File
@@ -727,7 +727,7 @@ public:
lua_pushvalue( LUA->L, 1 ); lua_pushvalue( LUA->L, 1 );
/* Argument 3 (pn): */ /* Argument 3 (pn): */
LUA->PushStack( (int) pn ); LuaHelpers::PushStack( (int) pn );
ASSERT( lua_gettop(LUA->L) == 6 ); /* vbSelectedOut, m_iLuaTable, function, self, arg, arg */ ASSERT( lua_gettop(LUA->L) == 6 ); /* vbSelectedOut, m_iLuaTable, function, self, arg, arg */
@@ -771,7 +771,7 @@ public:
lua_pushvalue( LUA->L, 1 ); lua_pushvalue( LUA->L, 1 );
/* Argument 3 (pn): */ /* Argument 3 (pn): */
LUA->PushStack( (int) pn ); LuaHelpers::PushStack( (int) pn );
ASSERT( lua_gettop(LUA->L) == 6 ); /* vbSelectedOut, m_iLuaTable, function, self, arg, arg */ ASSERT( lua_gettop(LUA->L) == 6 ); /* vbSelectedOut, m_iLuaTable, function, self, arg, arg */
+2 -2
View File
@@ -52,11 +52,11 @@ void IPreference::SetFromStack( lua_State *L )
} \ } \
void Preference<type>::PushValue( lua_State *L ) const \ void Preference<type>::PushValue( lua_State *L ) const \
{ \ { \
LuaManager::PushStack( m_currentValue, L ); \ LuaHelpers::PushStack( m_currentValue, L ); \
} \ } \
void Preference<type>::SetFromStack( lua_State *L ) \ void Preference<type>::SetFromStack( lua_State *L ) \
{ \ { \
LuaManager::PopStack( m_currentValue, L ); \ LuaHelpers::PopStack( m_currentValue, L ); \
} }
READFROM_AND_WRITETO( int ) READFROM_AND_WRITETO( int )
+1 -1
View File
@@ -862,7 +862,7 @@ int LuaFunc_GetPreference( lua_State *L )
REQ_ARG( "GetPreference", 1, string ); REQ_ARG( "GetPreference", 1, string );
CString sName; CString sName;
LUA->PopStack( sName ); LuaHelpers::PopStack( sName );
IPreference *pPref = PREFSMAN->GetPreferenceByName( sName ); IPreference *pPref = PREFSMAN->GetPreferenceByName( sName );
if( pPref == NULL ) if( pPref == NULL )
+2 -2
View File
@@ -1471,14 +1471,14 @@ public:
static int GetAllSteps( T* p, lua_State *L ) static int GetAllSteps( T* p, lua_State *L )
{ {
const vector<Steps*> &v = p->GetAllSteps(); const vector<Steps*> &v = p->GetAllSteps();
CreateTableFromArray<Steps*>( v, L ); LuaHelpers::CreateTableFromArray<Steps*>( v, L );
return 1; return 1;
} }
static int GetStepsByStepsType( T* p, lua_State *L ) static int GetStepsByStepsType( T* p, lua_State *L )
{ {
StepsType st = (StepsType)IArg(1); StepsType st = (StepsType)IArg(1);
const vector<Steps*> &v = p->GetStepsByStepsType( st ); const vector<Steps*> &v = p->GetStepsByStepsType( st );
CreateTableFromArray<Steps*>( v, L ); LuaHelpers::CreateTableFromArray<Steps*>( v, L );
return 1; return 1;
} }
static int GetSongDir( T* p, lua_State *L ) { lua_pushstring(L, p->GetSongDir() ); return 1; } static int GetSongDir( T* p, lua_State *L ) { lua_pushstring(L, p->GetSongDir() ); return 1; }
+2 -2
View File
@@ -1270,14 +1270,14 @@ public:
static int GetAllSongs( T* p, lua_State *L ) static int GetAllSongs( T* p, lua_State *L )
{ {
const vector<Song*> &v = p->GetAllSongs(); const vector<Song*> &v = p->GetAllSongs();
CreateTableFromArray<Song*>( v, L ); LuaHelpers::CreateTableFromArray<Song*>( v, L );
return 1; return 1;
} }
static int GetAllCourses( T* p, lua_State *L ) static int GetAllCourses( T* p, lua_State *L )
{ {
vector<Course*> v; vector<Course*> v;
p->GetAllCourses( v, BArg(1) ); p->GetAllCourses( v, BArg(1) );
CreateTableFromArray<Course*>( v, L ); LuaHelpers::CreateTableFromArray<Course*>( v, L );
return 1; return 1;
} }
static int FindSong( T* p, lua_State *L ) { Song *pS = p->FindSong(SArg(1)); if(pS) pS->PushSelf(L); else lua_pushnil(L); return 1; } static int FindSong( T* p, lua_State *L ) { Song *pS = p->FindSong(SArg(1)); if(pS) pS->PushSelf(L); else lua_pushnil(L); return 1; }