diff options
Diffstat (limited to 'Source/3rdParty/Luax/luax_state.inl')
-rw-r--r-- | Source/3rdParty/Luax/luax_state.inl | 140 |
1 files changed, 0 insertions, 140 deletions
diff --git a/Source/3rdParty/Luax/luax_state.inl b/Source/3rdParty/Luax/luax_state.inl deleted file mode 100644 index 12fa21f..0000000 --- a/Source/3rdParty/Luax/luax_state.inl +++ /dev/null @@ -1,140 +0,0 @@ -namespace Luax -{ - - /// - /// עṤעclass tabletype nameΪƿռϡעβԪȵNewõʱŻᡣ - /// - template<typename T> - void LuaxState::RegisterFactory() - { - lua_State* L = mState; - LuaxState& state = *this; - - int top = lua_gettop(L); // namespace table - assert(lua_istable(L, top)); - - // class table - lua_newtable(L); - LuaxNativeClass<T>::RegisterLuaxClass(state); - LuaxNativeClass<T>::RegisterLuaxFactoryClass(state); - T::RegisterLuaxClass(state); - - // TǷûעķ -#define _assertmethod(I, NAME) \ - GetField(I, NAME); \ - assert(IsType(-1, LUA_TFUNCTION)); \ - Pop(); - - _assertmethod(-1, "New"); - //_assertmethod(-1, "__gc"); - -#undef _assertmethod - -#ifdef LUAX_ENABLE_NATIVE_EXTEND - // .Extend() - lua_pushvalue(state, -1); // class table - lua_pushcclosure(state, LuaxNativeClass<T>::l_ExtendFactory, 1); - lua_setfield(state, -2, "Extend"); -#endif - - // class["__index"] = class - lua_pushvalue(state, -1); // class table - lua_setfield(state, -2, "__index"); - - LuaxNativeClass<T>::SetLuaxClassTableRef(state, -1); - - cc8* type = T::GetLuaxFactoryName(); - SetField(top, type); - - // reset top - lua_settop(L, top); - - // - T::RegisterLuaxPostprocess(state); - } - - /// - /// Singleton - /// - template<typename T> - void LuaxState::RegisterSingleton() - { - lua_State* L = mState; - LuaxState& state = *this; - - int top = lua_gettop(L); // namespace table - assert(lua_istable(L, top)); - - // class table. - lua_newtable(L); - LuaxNativeClass<T>::RegisterLuaxClass(state); - LuaxNativeClass<T>::RegisterLuaxSingletonClass(state); - T::RegisterLuaxClass(state); - - LuaxNativeClass<T>::SetLuaxClassTableRef(state, -1); - - lua_pushvalue(state, -1); - lua_setfield(state, -2, "__index"); - -#ifdef LUAX_ENABLE_NATIVE_EXTEND - // .Extend() - lua_pushvalue(state, -1); // class table - lua_pushcclosure(state, LuaxNativeClass<T>::l_ExtendSingleton, 1); - lua_setfield(state, -2, "Extend"); -#endif - - cc8* type = T::GetLuaxSingletonName(); - SetField(top, type); - - // reset top - lua_settop(L, top); - - // - T::RegisterLuaxPostprocess(state); - } - - template<typename T> - void LuaxState::SetField(int idx, cc8* key, T value) - { - if (IsTableOrUserdata(idx)) - { - idx = AbsIndex(idx); - this->Push(value); - lua_setfield(mState, idx, key); - } - } - - template<typename T> - T LuaxState::GetField(int idx, cc8* key, T value) - { - GetField(idx, key); - T result = GetValue < T >(-1, value); - this->Pop(); - - return result; - } - - template<typename T> - T LuaxState::GetField(int idx, int key, T value) - { - GetField(idx, key); - T result = GetValue < T >(-1, value); - Pop(); - - return result; - } - - template<typename T> - T* LuaxState::GetLuaUserdata(int idx) - { - void* p = nullptr; - - if (IsType(idx, LUA_TUSERDATA)) - { - p = *(void**)lua_touserdata(mState, idx); - } - - return static_cast<T*>(p); - } - -}
\ No newline at end of file |