Initial Commit
This commit is contained in:
58
thirdparty/luaplus/Src/LuaPlus/LuaStateCD.h
vendored
Normal file
58
thirdparty/luaplus/Src/LuaPlus/LuaStateCD.h
vendored
Normal file
@@ -0,0 +1,58 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// This source file is part of the LuaPlus source distribution and is Copyright
|
||||
// 2001-2010 by Joshua C. Jensen (jjensen@workspacewhiz.com).
|
||||
//
|
||||
// The latest version may be obtained from http://luaplus.org/.
|
||||
//
|
||||
// The code presented in this file may be used in any environment it is
|
||||
// acceptable to use Lua.
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
#ifndef LUASTATECD_H
|
||||
#define LUASTATECD_H
|
||||
|
||||
#include "LuaPlusInternal.h"
|
||||
#include "LuaPlusCD.h"
|
||||
|
||||
namespace LPCD
|
||||
{
|
||||
using namespace LuaPlus;
|
||||
|
||||
template<> struct Type<int (*)(LuaState*)> {
|
||||
static void Push(lua_State* L, int (*value)(LuaState*));
|
||||
static inline bool Match(lua_State* L, int idx) { return lua_type(L, idx) == LUA_TFUNCTION; }
|
||||
static inline void* Get(lua_State* L, int /*idx*/) { return lua_State_to_LuaState(L); }
|
||||
};
|
||||
|
||||
inline int LuaStateFunctionDispatcher(lua_State* L) {
|
||||
typedef int (*Functor)(LuaPlus::LuaState*);
|
||||
unsigned char* buffer = LPCD::GetFirstUpvalueAsUserdata(L);
|
||||
Functor& func = *(Functor*)(buffer);
|
||||
return (*func)(lua_State_to_LuaState(L));
|
||||
}
|
||||
|
||||
template <typename Callee>
|
||||
class LuaStateMemberDispatcherHelper {
|
||||
public:
|
||||
static inline int LuaStateMemberDispatcher(lua_State* L) {
|
||||
typedef int (Callee::*Functor)(LuaPlus::LuaState*);
|
||||
unsigned char* buffer = LPCD::GetFirstUpvalueAsUserdata(L);
|
||||
Callee& callee = **(Callee**)buffer;
|
||||
Functor& func = *(Functor*)(buffer + sizeof(Callee*));
|
||||
return (callee.*func)(lua_State_to_LuaState(L));
|
||||
}
|
||||
};
|
||||
|
||||
template <typename Callee>
|
||||
class Object_MemberDispatcher_to_LuaStateHelper {
|
||||
public:
|
||||
static inline int Object_MemberDispatcher_to_LuaState(lua_State* L) {
|
||||
typedef int (Callee::*Functor)(LuaPlus::LuaState*);
|
||||
unsigned char* buffer = GetFirstUpvalueAsUserdata(L);
|
||||
Functor& func = *(Functor*)(buffer);
|
||||
Callee& callee = *(Callee*)GetObjectUserdata(L);
|
||||
return (callee.*func)(lua_State_to_LuaState(L));
|
||||
}
|
||||
};
|
||||
} // namespace LPCD
|
||||
|
||||
#endif // LUASTATECD_H
|
||||
Reference in New Issue
Block a user