1
0

cLuaState: Made public the GetStackValue() functions.

This commit is contained in:
madmaxoft 2014-03-04 21:55:24 +01:00
parent e50ffba1ad
commit ecfe17b096
2 changed files with 61 additions and 54 deletions

View File

@ -716,7 +716,7 @@ void cLuaState::Push(cBlockEntity * a_BlockEntity)
void cLuaState::GetReturn(int a_StackPos, bool & a_ReturnedVal) void cLuaState::GetStackValue(int a_StackPos, bool & a_ReturnedVal)
{ {
a_ReturnedVal = (tolua_toboolean(m_LuaState, a_StackPos, a_ReturnedVal ? 1 : 0) > 0); a_ReturnedVal = (tolua_toboolean(m_LuaState, a_StackPos, a_ReturnedVal ? 1 : 0) > 0);
} }
@ -725,11 +725,17 @@ void cLuaState::GetReturn(int a_StackPos, bool & a_ReturnedVal)
void cLuaState::GetReturn(int a_StackPos, AString & a_ReturnedVal) void cLuaState::GetStackValue(int a_StackPos, AString & a_Value)
{ {
if (lua_isstring(m_LuaState, a_StackPos)) size_t len = 0;
const char * data = lua_tolstring(m_LuaState, a_StackPos, &len);
if (data != NULL)
{ {
a_ReturnedVal = tolua_tocppstring(m_LuaState, a_StackPos, a_ReturnedVal.c_str()); a_Value.assign(data, len);
}
else
{
a_Value.clear();
} }
} }
@ -737,7 +743,7 @@ void cLuaState::GetReturn(int a_StackPos, AString & a_ReturnedVal)
void cLuaState::GetReturn(int a_StackPos, int & a_ReturnedVal) void cLuaState::GetStackValue(int a_StackPos, int & a_ReturnedVal)
{ {
if (lua_isnumber(m_LuaState, a_StackPos)) if (lua_isnumber(m_LuaState, a_StackPos))
{ {
@ -749,7 +755,7 @@ void cLuaState::GetReturn(int a_StackPos, int & a_ReturnedVal)
void cLuaState::GetReturn(int a_StackPos, double & a_ReturnedVal) void cLuaState::GetStackValue(int a_StackPos, double & a_ReturnedVal)
{ {
if (lua_isnumber(m_LuaState, a_StackPos)) if (lua_isnumber(m_LuaState, a_StackPos))
{ {

View File

@ -198,6 +198,19 @@ public:
void Push(cHopperEntity * a_Hopper); void Push(cHopperEntity * a_Hopper);
void Push(cBlockEntity * a_BlockEntity); void Push(cBlockEntity * a_BlockEntity);
/** Retrieve value at a_StackPos, if it is a valid bool. If not, a_Value is unchanged */
void GetStackValue(int a_StackPos, bool & a_Value);
/** Retrieve value at a_StackPos, if it is a valid string. If not, a_Value is unchanged */
void GetStackValue(int a_StackPos, AString & a_Value);
/** Retrieve value at a_StackPos, if it is a valid number. If not, a_Value is unchanged */
void GetStackValue(int a_StackPos, int & a_Value);
/** Retrieve value at a_StackPos, if it is a valid number. If not, a_Value is unchanged */
void GetStackValue(int a_StackPos, double & a_Value);
/** Call any 0-param 0-return Lua function in a single line: */ /** Call any 0-param 0-return Lua function in a single line: */
template <typename FnT> template <typename FnT>
bool Call(FnT a_FnName) bool Call(FnT a_FnName)
@ -270,7 +283,7 @@ public:
{ {
return false; return false;
} }
GetReturn(-1, a_Ret1); GetStackValue(-1, a_Ret1);
lua_pop(m_LuaState, 1); lua_pop(m_LuaState, 1);
return true; return true;
} }
@ -292,7 +305,7 @@ public:
{ {
return false; return false;
} }
GetReturn(-1, a_Ret1); GetStackValue(-1, a_Ret1);
lua_pop(m_LuaState, 1); lua_pop(m_LuaState, 1);
ASSERT(InitialTop == lua_gettop(m_LuaState)); ASSERT(InitialTop == lua_gettop(m_LuaState));
return true; return true;
@ -315,7 +328,7 @@ public:
{ {
return false; return false;
} }
GetReturn(-1, a_Ret1); GetStackValue(-1, a_Ret1);
lua_pop(m_LuaState, 1); lua_pop(m_LuaState, 1);
return true; return true;
} }
@ -338,7 +351,7 @@ public:
{ {
return false; return false;
} }
GetReturn(-1, a_Ret1); GetStackValue(-1, a_Ret1);
lua_pop(m_LuaState, 1); lua_pop(m_LuaState, 1);
return true; return true;
} }
@ -362,7 +375,7 @@ public:
{ {
return false; return false;
} }
GetReturn(-1, a_Ret1); GetStackValue(-1, a_Ret1);
lua_pop(m_LuaState, 1); lua_pop(m_LuaState, 1);
return true; return true;
} }
@ -387,7 +400,7 @@ public:
{ {
return false; return false;
} }
GetReturn(-1, a_Ret1); GetStackValue(-1, a_Ret1);
lua_pop(m_LuaState, 1); lua_pop(m_LuaState, 1);
return true; return true;
} }
@ -414,7 +427,7 @@ public:
{ {
return false; return false;
} }
GetReturn(-1, a_Ret1); GetStackValue(-1, a_Ret1);
lua_pop(m_LuaState, 1); lua_pop(m_LuaState, 1);
return true; return true;
} }
@ -442,7 +455,7 @@ public:
{ {
return false; return false;
} }
GetReturn(-1, a_Ret1); GetStackValue(-1, a_Ret1);
lua_pop(m_LuaState, 1); lua_pop(m_LuaState, 1);
return true; return true;
} }
@ -471,7 +484,7 @@ public:
{ {
return false; return false;
} }
GetReturn(-1, a_Ret1); GetStackValue(-1, a_Ret1);
lua_pop(m_LuaState, 1); lua_pop(m_LuaState, 1);
return true; return true;
} }
@ -501,7 +514,7 @@ public:
{ {
return false; return false;
} }
GetReturn(-1, a_Ret1); GetStackValue(-1, a_Ret1);
lua_pop(m_LuaState, 1); lua_pop(m_LuaState, 1);
return true; return true;
} }
@ -532,7 +545,7 @@ public:
{ {
return false; return false;
} }
GetReturn(-1, a_Ret1); GetStackValue(-1, a_Ret1);
lua_pop(m_LuaState, 1); lua_pop(m_LuaState, 1);
return true; return true;
} }
@ -553,8 +566,8 @@ public:
{ {
return false; return false;
} }
GetReturn(-2, a_Ret1); GetStackValue(-2, a_Ret1);
GetReturn(-1, a_Ret2); GetStackValue(-1, a_Ret2);
lua_pop(m_LuaState, 2); lua_pop(m_LuaState, 2);
return true; return true;
} }
@ -576,8 +589,8 @@ public:
{ {
return false; return false;
} }
GetReturn(-2, a_Ret1); GetStackValue(-2, a_Ret1);
GetReturn(-1, a_Ret2); GetStackValue(-1, a_Ret2);
lua_pop(m_LuaState, 2); lua_pop(m_LuaState, 2);
return true; return true;
} }
@ -601,8 +614,8 @@ public:
{ {
return false; return false;
} }
GetReturn(-2, a_Ret1); GetStackValue(-2, a_Ret1);
GetReturn(-1, a_Ret2); GetStackValue(-1, a_Ret2);
lua_pop(m_LuaState, 2); lua_pop(m_LuaState, 2);
return true; return true;
} }
@ -627,8 +640,8 @@ public:
{ {
return false; return false;
} }
GetReturn(-2, a_Ret1); GetStackValue(-2, a_Ret1);
GetReturn(-1, a_Ret2); GetStackValue(-1, a_Ret2);
lua_pop(m_LuaState, 2); lua_pop(m_LuaState, 2);
return true; return true;
} }
@ -654,8 +667,8 @@ public:
{ {
return false; return false;
} }
GetReturn(-2, a_Ret1); GetStackValue(-2, a_Ret1);
GetReturn(-1, a_Ret2); GetStackValue(-1, a_Ret2);
lua_pop(m_LuaState, 2); lua_pop(m_LuaState, 2);
return true; return true;
} }
@ -683,8 +696,8 @@ public:
{ {
return false; return false;
} }
GetReturn(-2, a_Ret1); GetStackValue(-2, a_Ret1);
GetReturn(-1, a_Ret2); GetStackValue(-1, a_Ret2);
lua_pop(m_LuaState, 2); lua_pop(m_LuaState, 2);
return true; return true;
} }
@ -713,8 +726,8 @@ public:
{ {
return false; return false;
} }
GetReturn(-2, a_Ret1); GetStackValue(-2, a_Ret1);
GetReturn(-1, a_Ret2); GetStackValue(-1, a_Ret2);
lua_pop(m_LuaState, 2); lua_pop(m_LuaState, 2);
return true; return true;
} }
@ -743,9 +756,9 @@ public:
{ {
return false; return false;
} }
GetReturn(-3, a_Ret1); GetStackValue(-3, a_Ret1);
GetReturn(-2, a_Ret2); GetStackValue(-2, a_Ret2);
GetReturn(-1, a_Ret3); GetStackValue(-1, a_Ret3);
lua_pop(m_LuaState, 3); lua_pop(m_LuaState, 3);
return true; return true;
} }
@ -775,9 +788,9 @@ public:
{ {
return false; return false;
} }
GetReturn(-3, a_Ret1); GetStackValue(-3, a_Ret1);
GetReturn(-2, a_Ret2); GetStackValue(-2, a_Ret2);
GetReturn(-1, a_Ret3); GetStackValue(-1, a_Ret3);
lua_pop(m_LuaState, 3); lua_pop(m_LuaState, 3);
return true; return true;
} }
@ -808,11 +821,11 @@ public:
{ {
return false; return false;
} }
GetReturn(-5, a_Ret1); GetStackValue(-5, a_Ret1);
GetReturn(-4, a_Ret2); GetStackValue(-4, a_Ret2);
GetReturn(-3, a_Ret3); GetStackValue(-3, a_Ret3);
GetReturn(-2, a_Ret4); GetStackValue(-2, a_Ret4);
GetReturn(-1, a_Ret5); GetStackValue(-1, a_Ret5);
lua_pop(m_LuaState, 5); lua_pop(m_LuaState, 5);
return true; return true;
} }
@ -918,18 +931,6 @@ protected:
/** Pushes a usertype of the specified class type onto the stack */ /** Pushes a usertype of the specified class type onto the stack */
void PushUserType(void * a_Object, const char * a_Type); void PushUserType(void * a_Object, const char * a_Type);
/** Retrieve value returned at a_StackPos, if it is a valid bool. If not, a_ReturnedVal is unchanged */
void GetReturn(int a_StackPos, bool & a_ReturnedVal);
/** Retrieve value returned at a_StackPos, if it is a valid string. If not, a_ReturnedVal is unchanged */
void GetReturn(int a_StackPos, AString & a_ReturnedVal);
/** Retrieve value returned at a_StackPos, if it is a valid number. If not, a_ReturnedVal is unchanged */
void GetReturn(int a_StackPos, int & a_ReturnedVal);
/** Retrieve value returned at a_StackPos, if it is a valid number. If not, a_ReturnedVal is unchanged */
void GetReturn(int a_StackPos, double & a_ReturnedVal);
/** /**
Calls the function that has been pushed onto the stack by PushFunction(), Calls the function that has been pushed onto the stack by PushFunction(),
with arguments pushed by PushXXX(). with arguments pushed by PushXXX().