-
Notifications
You must be signed in to change notification settings - Fork 8
Expand file tree
/
Copy pathcpps_classvar.h
More file actions
61 lines (56 loc) · 1.74 KB
/
Copy pathcpps_classvar.h
File metadata and controls
61 lines (56 loc) · 1.74 KB
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
#ifndef CPPS_CLASSVAR_CPPS_HEAD_
#define CPPS_CLASSVAR_CPPS_HEAD_
//===================================
//@Author : Johnson
//@QQ : 88481106
//@Email : 88481106@qq.com
//@Date : 2015/12/10 (yy/mm/dd)
//@Module : CPPS_CLASSVAR
//@Description : Cpps类对象
//@website : http://cppscript.org
//==================================
namespace cpps
{
struct cpps_cppsclassvar : public cpps_domain , public cpps_gcobject
{
cpps_cppsclassvar(const char* clsname, cpps_domain* p, char type, bool alloc);
virtual ~cpps_cppsclassvar(){}
virtual void* getclsptr();
virtual void setclsptr(void* p);
virtual bool isallocclass();
virtual void release();
virtual size_t size();
virtual cpps_cppsclass* getcppsclass();
bool isalloc;
int usecount;
};
template<class CLS>
struct cpps_classvar : public cpps_cppsclassvar
{
cpps_classvar(const char* clsname,cpps_domain* p, char type, bool alloc)
:cpps_cppsclassvar(clsname,p, type, alloc)
{
__class = NULL;
if (alloc) __class = CPPSNEW( CLS)();//暂时不支持带参数的构造函数
}
virtual ~cpps_classvar(){}
virtual void *getclsptr(){ return (void *)__class; }
virtual void release() {
if (__class && isallocclass()) CPPSDELETE( __class );
__class = NULL;
CPPSDELETE( this);
}
virtual void setclsptr(void* p) { __class = (CLS*)p; }
virtual size_t size() { return sizeof(*this) + ((__class && isallocclass()) ? sizeof(*__class) : 0); }
virtual void destory(C* c, bool isclose = false) {
cpps_domain::destory(c);
if (__class && isallocclass()) {
c->_classvarlock->lock();
c->_class_map_classvar.erase(__class);
c->_classvarlock->unlock();
}
}
CLS *__class;
};
}
#endif // CPPS_CLASSVAR_CPPS_HEAD_