blob: d241030ea08be11b0ac4917040c6706f8b0d1ac6 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
#ifndef __LUAX_CLASS_H__
#define __LUAX_CLASS_H__
#include <vector>
#include "lua.hpp"
#include "luax_config.h"
#include "luax_state.h"
namespace Luax
{
#define LUAX_DECL_METHOD(mtd) static int mtd(lua_State*)
///
/// RegisterLuaxClass עķͳԱö١ȵclass table
/// LuaxRegisterInterface עӿڷinterface table
/// LuaxGetFactoryName ùͬʱעʱעΪsingletonͨʱ
///
#define LUAX_DECL_FACTORY(type) \
static void RegisterLuaxClass(LuaxState&);\
static void RegisterLuaxInterface(LuaxState&);\
static const char* GetLuaxFactoryName() { return #type; };\
static const char* GetLuaxClassName() { return #type; };\
static bool IsLuaxClassSingleton() { return false; };
///
/// RegisterLuaxClass עķͳԱö١ȵclass table
/// LuaxGetSingletonName õ
///
#define LUAX_DECL_SINGLETON(type) \
static void RegisterLuaxClass(LuaxState&); \
static const char* GetLuaxSingletonName() { return #type; }; \
static const char* GetLuaxClassName() { return #type; }; \
static bool IsLuaxClassSingleton() { return true; };
///
/// Ҫ¶luaclassҪ̳дࡣͨluaʵҪȷüȷԣڶ߳Ҫȷͷš
///
class LuaxClass
{
public:
void Retain();
void Release();
//------------------------------------------------------------------------------------------------------------
//
template<class T>
static void RegisterLuaxClass(LuaxState& state);
template<class T>
LUAX_DECL_METHOD(l_GetClassName);
//------------------------------------------------------------------------------------------------------------
//
template<class T>
static void RegisterLuaxFactoryClass(LuaxState& state);
template<class T>
static void RegisterLuaxInterface(LuaxState& state);
LUAX_DECL_METHOD(l_GC);
//------------------------------------------------------------------------------------------------------------
//
template<class T>
static void RegisterLuaxSingletonClass(LuaxState& state);
protected:
LuaxClass();
~LuaxClass();
///
/// userdata pushջûгʼmUserdataʼúԪѳʼõuserdataջ
///
bool PushLuaUserdata(LuaxState& state);
private:
///
/// ȡַҪַֻͨڶϴʵõջϺ;̬ıȡַ֤üȷ
/// ҪãʹôݶǴݵַ
///
void* operator &();
void BindToLua(LuaxState& state);
int mRefCount;
void* mUserdata;
};
///
/// ڳԱﴴLuaxStateԲм顣
///
#define LUAX_SETUP(L, params) \
LuaxState state(L);\
if(!state.CheckParams(1, params)) return 0;
#include "luax_class.inl"
}
#endif
|