summaryrefslogtreecommitdiff
path: root/Source/3rdParty/Luax/luax_state.h
diff options
context:
space:
mode:
Diffstat (limited to 'Source/3rdParty/Luax/luax_state.h')
-rw-r--r--Source/3rdParty/Luax/luax_state.h166
1 files changed, 153 insertions, 13 deletions
diff --git a/Source/3rdParty/Luax/luax_state.h b/Source/3rdParty/Luax/luax_state.h
index 7b6338f..52b8f38 100644
--- a/Source/3rdParty/Luax/luax_state.h
+++ b/Source/3rdParty/Luax/luax_state.h
@@ -1,26 +1,166 @@
#ifndef __LUAX_STATE_H__
#define __LUAX_STATE_H__
+#include <string>
+
+#include "lua.hpp"
+#include "luax_config.h"
+
namespace Luax
{
- class LuaxState
- {
- public:
- LuaxState(lua_State* state) : mState(state){};
- ~LuaxState() {};
+ class LuaxClass;
+
+ ///
+ /// lua_StateĴ˱һlua_Stateòݡһʵmetatable£
+ /// interface table
+ /// member table
+ /// ref table
+ /// userdata
+ /// userdataͨgetmetatableȡϼmetatable֮⻹һclass tableעڶӦƿռ
+ ///
+ LUAX_API class LuaxState
+ {
+ public:
+
+ LuaxState(lua_State* state);
+ ~LuaxState();
+
+ operator lua_State*();
+ operator bool();
+ lua_State* operator ->();
+ lua_State& operator *();
+
+ //------------------------------------------------------------------------------------------------------------
+
+ void OpenLibs();
+
+ //------------------------------------------------------------------------------------------------------------
+ // ƿռƿռһ_Gı
+
+ void PushNamespace(cc8* name);
+ void PopNamespace();
+
+ //------------------------------------------------------------------------------------------------------------
+
+ int GetTop();
+ bool CheckParams(int idx, cc8* format);
+ int AbsIndex(int idx);
+ int Call(int nArgs, int nResults);
+
+ //------------------------------------------------------------------------------------------------------------
+
+ ///
+ /// עCעһ{0 0}
+ ///
+ void Register(const luaL_Reg *l);
+
+ void GetField(int idx, cc8* name);
+ void GetField(int idx, int key);
+ std::string GetField(int idx, cc8* key, cc8* value);
+ std::string GetField(int idx, int key, cc8* value);
+ std::string GetField(int idx, cc8* key, const std::string& value);
+ std::string GetField(int idx, int key, const std::string& value);
+ bool GetFieldWithType(int idx, cc8* name, int type);
+ bool GetFieldWithType(int idx, int key, int type);
+ bool GetSubfieldWithType(int idx, cc8* format, int type, ...);
+ static cc8* GetLuaTypeName(int type);
+
+ void SetField(int idx, cc8* key);
+
+ bool IsNil(int idx);
+ bool IsNilOrNone(int idx);
+ bool IsTableOrUserdata(int idx);
+ bool IsTrueOrNotNil(int idx);
+ bool IsType(int idx, int type);
+ bool IsType(int idx, cc8* name, int type);
+ bool IsValid();
+
+ bool HasField(int idx, cc8* name);
+ bool HasField(int idx, int key);
+ bool HasField(int idx, cc8* name, int type);
+ bool HasField(int idx, int name, int type);
+ bool HasKeys(int idx);
+
+ void Push();
+ void Push(bool value);
+ void Push(cc8* value);
+ void Push(double value);
+ void Push(float value);
+ void Push(int value);
+ void Push(u16 value);
+ void Push(u32 value);
+ void Push(u64 value);
+ void Push(uintptr value);
+ void Push(lua_CFunction value);
+ void Push(void* data, size_t size);
+ void Push(const void* value);
+
+ ///
+ /// void** ʽuserdataֵΪptr
+ ///
+ void PushPtrUserData(void* ptr);
+
+ void Pop(int n = 1);
+
+ //------------------------------------------------------------------------------------------------------------
+
+ template<typename T> T GetValue(int idx, T default_value);
+ template<typename T> T GetField(int idx, int key, T value);
+ template<typename T> T GetField(int idx, cc8* key, T value);
+ template<typename T> void SetField(int idx, cc8* key, T value);
+ template<typename T> void SetFieldByIndex(int idx, int key, T value);
+
+ //------------------------------------------------------------------------------------------------------------
+
+ void DoString(const std::string& code);
+ void DoFile(const std::string& file);
+
+ //------------------------------------------------------------------------------------------------------------
+
+ ///
+ /// עṤͨ࣬New
+ ///
+ template<typename T>
+ void RegisterFactory();
+
+ ///
+ /// עᵥûNew
+ ///
+ template<typename T>
+ void RegisterSingleton();
+
+ private:
+
+ ///
+ /// ζLuaxStateĵַز
+ ///
+ void* operator &();
+ void* operator new(size_t size);
+
+ lua_State* const mState;
- inline operator lua_State*() { return mState; };
- operator bool();
- inline lua_State* operator ->() { return mState; };
- inline lua_State& operator *() { return *mState; };
+ };
- private:
- void* operator new(size_t size);
+#include "luax_state.inl"
- lua_State* mState;
+ //--------------------------------------------------------------------------------------------------------------
+ // GetValue()ģػ
- };
+ template <> bool LuaxState::GetValue < bool >(int idx, const bool value);
+ template <> cc8* LuaxState::GetValue < cc8* >(int idx, const cc8* value);
+ template <> double LuaxState::GetValue < double >(int idx, const double value);
+ template <> float LuaxState::GetValue < float >(int idx, const float value);
+ template <> s8 LuaxState::GetValue < s8 >(int idx, const s8 value);
+ template <> s16 LuaxState::GetValue < s16 >(int idx, const s16 value);
+ template <> s32 LuaxState::GetValue < s32 >(int idx, const s32 value);
+ template <> s64 LuaxState::GetValue < s64 >(int idx, const s64 value);
+ template <> u8 LuaxState::GetValue < u8 >(int idx, const u8 value);
+ template <> u16 LuaxState::GetValue < u16 >(int idx, const u16 value);
+ template <> u32 LuaxState::GetValue < u32 >(int idx, const u32 value);
+ template <> u64 LuaxState::GetValue < u64 >(int idx, const u64 value);
+ template <> std::string LuaxState::GetValue < std::string >(int idx, const std::string value);
+ template <> const void* LuaxState::GetValue < const void* >(int idx, const void* value);
}