void GetGlobal(const char *name,T t) { lua::GetGlobal(hLua,name); CheckVarFromLua(hLua,t,-1); lua::Pop(hLua,1); }
//------------------------------------------------------------------------------ inline void CheckVarFromLua(lua::Handle hLua,lua::Var *t,int i) { int type = lua::TypeCast(hLua, i); if ( type==LUA_TSTRING ) { lua::Str var; CheckVarFromLua(hLua,&var,i); *t = var; } else if ( type==LUA_TBOOLEAN ) { lua::Bool var; CheckVarFromLua(hLua,&var,i); *t = var; } else if ( type==LUA_TNIL ) { *t = lua::Var(); } else if ( type==LUA_TNONE ) { lua::Log<<"error:No one know what type is it. That's new"<<lua::End; } else if ( type==LUA_TLIGHTUSERDATA ) { lua::Ptr var; CheckVarFromLua(hLua,&var,i); *t = var; } else if ( type==LUA_TTABLE ) { lua::Table table; CheckVarFromLua(hLua,&table,i); *t = table; } else if ( type==LUA_TFUNCTION ) { lua::PushValue(hLua,-1); lua::Func func; lua::Register::Item item = hLua->_register->newItem(); item->setVar(); func._set(hLua,item); *t = func; } else if ( type==LUA_TUSERDATA ) { lua::PushValue(hLua,-1); lua::User func; lua::Register::Item item = hLua->_register->newItem(); item->setVar(); func._set(hLua,item); *t = func; } else if ( type==LUA_TTHREAD ) { lua::PushValue(hLua,-1); lua::Task func; lua::Register::Item item = hLua->_register->newItem(); item->setVar(); func._set(hLua,item); *t = func; } else if ( lua_isinteger(hLua->_lua, i) ) { lua::Int var; CheckVarFromLua(hLua,&var,i); *t = var; } else if ( lua_isnumber(hLua->_lua, i) ) { lua::Num var; CheckVarFromLua(hLua,&var,i); *t = var; } else { lua::Log<<"error:you get something luapp can't handle with"<<lua::End; *t = lua::Var(); } }
inline void _SaveTableValue(lua::NativeState hLua,lua::Table *table,T key) { // ... [value] int type = lua_type(hLua, -1); if ( type==LUA_TSTRING ) { lua::Str _value; CheckVarFromLua(hLua,&_value,-1); lua::Var value(_value); (*table)[key] = value; } else if ( type==LUA_TTABLE ) { lua::Table subTable; _VisitTable(hLua,&subTable); lua::Var value = subTable; (*table)[key] = value; } // Just in case. else if ( type==LUA_TNIL ) { // This element is not exist. } else if ( type==LUA_TNONE ) { lua::Log<<"error:No one know what type is it"<<lua::End; } else if ( type==LUA_TLIGHTUSERDATA ) { lua::Ptr value; CheckVarFromLua(hLua,&value,-1); (*table)[key] = value; } else if ( type==LUA_TBOOLEAN ) { lua::Bool value; CheckVarFromLua(hLua,&value,-1); (*table)[key] = value; } #ifndef _LUAPP_KEEP_LOCAL_LUA_VARIABLE_ else if ( type==LUA_TFUNCTION ) { lua::Func value; (*table)[key] = value; } else if ( type==LUA_TTHREAD ) { lua::Task value; (*table)[key] = value; } else if ( type==LUA_TUSERDATA ) { lua::User value; (*table)[key] = value; } #endif else if ( lua_isinteger(hLua, -1) ) { lua::Int value; CheckVarFromLua(hLua,&value,-1); (*table)[key] = value; } else if ( lua_isnumber(hLua, -1) ) { lua::Num value; CheckVarFromLua(hLua,&value,-1); (*table)[key] = value; } else { // drop else value. } // ... [value] }
inline void _SaveTableValue(lua::Handle hLua,lua::Table *table,T key) { // ... [value] int type = lua::TypeCast(hLua, -1); if ( type==LUA_TSTRING ) { lua::Str _value; CheckVarFromLua(hLua,&_value,-1); lua::Var value(_value); (*table)[key] = value; } else if ( type==LUA_TTABLE ) { lua::Table subTable; _VisitTable(hLua,&subTable); lua::Var value = subTable; (*table)[key] = value; } // Just in case. else if ( type==LUA_TNIL ) { // This element is not exist. } else if ( type==LUA_TNONE ) { lua::Log<<"error:No one know what type is it"<<lua::End; } else if ( type==LUA_TLIGHTUSERDATA ) { lua::Ptr value; CheckVarFromLua(hLua,&value,-1); (*table)[key] = value; } else if ( type==LUA_TBOOLEAN ) { lua::Bool value; CheckVarFromLua(hLua,&value,-1); (*table)[key] = value; } else if ( type==LUA_TFUNCTION ) { lua::PushValue(hLua,-1); lua::Func value; lua::Register::Item item = hLua->_register->newItem(); item->setVar(); value._set(hLua,item); (*table)[key] = value; } else if ( type==LUA_TUSERDATA ) { lua::PushValue(hLua,-1); lua::User value; lua::Register::Item item = hLua->_register->newItem(); item->setVar(); value._set(hLua,item); (*table)[key] = value; } else if ( type==LUA_TTHREAD ) { lua::PushValue(hLua,-1); lua::Task value; lua::Register::Item item = hLua->_register->newItem(); item->setVar(); value._set(hLua,item); (*table)[key] = value; } else if ( lua_isinteger(hLua->_lua, -1) ) { lua::Int value; CheckVarFromLua(hLua,&value,-1); (*table)[key] = value; } else if ( lua_isnumber(hLua->_lua, -1) ) { lua::Num value; CheckVarFromLua(hLua,&value,-1); (*table)[key] = value; } else { // drop else value. } // ... [value] }
//------------------------------------------------------------------------------ inline void CheckVarFromLua(lua::NativeState hLua,lua::Var *t,int i) { int type = lua_type(hLua, i); if ( type==LUA_TSTRING ) { lua::Str var; CheckVarFromLua(hLua,&var,i); *t = var; } else if ( type==LUA_TBOOLEAN ) { lua::Bool var; CheckVarFromLua(hLua,&var,i); *t = var; } else if ( type==LUA_TNIL ) { *t = lua::Var(); } else if ( type==LUA_TNONE ) { lua::Log<<"error:No one know what type is it. That's new"<<lua::End; } else if ( type==LUA_TLIGHTUSERDATA ) { lua::Ptr var; CheckVarFromLua(hLua,&var,i); *t = var; } else if ( type==LUA_TTABLE ) { lua::Table table; CheckVarFromLua(hLua,&table,i); *t = table; } #ifndef _LUAPP_KEEP_LOCAL_LUA_VARIABLE_ else if ( type==LUA_TFUNCTION ) { lua::Func var; *t = var; } else if ( type==LUA_TTHREAD ) { lua::Task var; *t = var; } else if ( type==LUA_TUSERDATA ) { lua::User var; *t = var; } #endif else if ( lua_isinteger(hLua, i) ) { lua::Int var; CheckVarFromLua(hLua,&var,i); *t = var; } else if ( lua_isnumber(hLua, i) ) { lua::Num var; CheckVarFromLua(hLua,&var,i); *t = var; } else { lua::Log<<"error:you get something luapp can't handle with"<<lua::End; *t = lua::Var(); } }