@@ -8,26 +8,94 @@ namespace ursine
8
8
{
9
9
namespace meta
10
10
{
11
+ template <typename GlobalType, typename GetterType, typename SetterType>
12
+ void ReflectionDatabase::AddGlobal (const std::string &name, GetterType getter, SetterType setter, const MetaManager::Initializer &meta)
13
+ {
14
+ typedef GlobalGetter<GlobalType, true > GlobalGetterType;
15
+ typedef GlobalSetter<GlobalType, true > GlobalSetterType;
16
+
17
+ Global global {
18
+ name,
19
+ typeof ( GlobalType ),
20
+ !getter ? nullptr : new GlobalGetterType (
21
+ reinterpret_cast <typename GlobalGetterType::Signature>( getter )
22
+ ),
23
+ !setter ? nullptr : new GlobalSetterType (
24
+ reinterpret_cast <typename GlobalSetterType::Signature>( setter )
25
+ )
26
+ };
27
+
28
+ global.m_meta = meta;
29
+
30
+ globals.emplace ( name, global );
31
+ }
32
+
33
+ // /////////////////////////////////////////////////////////////////////
34
+
35
+ template <typename GlobalType, typename GetterType>
36
+ void ReflectionDatabase::AddGlobal (const std::string &name, GetterType getter, GlobalType *globalSetter, const MetaManager::Initializer &meta)
37
+ {
38
+ typedef GlobalGetter<GlobalType, true > GlobalGetterType;
39
+ typedef GlobalSetter<GlobalType, false > GlobalSetterType;
40
+
41
+ Global global {
42
+ name,
43
+ typeof ( GlobalType ),
44
+ !getter ? nullptr : new GlobalGetterType (
45
+ reinterpret_cast <typename GlobalGetterType::Signature>( getter )
46
+ ),
47
+ !globalSetter ? nullptr : new GlobalSetterType ( globalSetter )
48
+ };
49
+
50
+ global.m_meta = meta;
51
+
52
+ globals.emplace ( name, global );
53
+ }
54
+
55
+ // /////////////////////////////////////////////////////////////////////
56
+
57
+ template <typename GlobalType, typename SetterType>
58
+ void ReflectionDatabase::AddGlobal (const std::string &name, GlobalType *globalGetter, SetterType setter, const MetaManager::Initializer &meta)
59
+ {
60
+ typedef GlobalGetter<GlobalType, false > GlobalGetterType;
61
+ typedef GlobalSetter<GlobalType, true > GlobalSetterType;
62
+
63
+ Global global {
64
+ name,
65
+ typeof ( GlobalType ),
66
+ !globalGetter ? nullptr : new GlobalGetterType ( globalGetter ),
67
+ !setter ? nullptr : new GlobalSetterType (
68
+ reinterpret_cast <typename GlobalSetterType::Signature>( setter )
69
+ )
70
+ };
71
+
72
+ global.m_meta = meta;
73
+
74
+ globals.emplace ( name, global );
75
+ }
76
+
77
+ // /////////////////////////////////////////////////////////////////////
78
+
11
79
template <typename GlobalType>
12
- void ReflectionDatabase::AddGlobal (
13
- const std::string &name,
14
- Global::Getter getter,
15
- Global::Setter setter,
16
- const MetaManager::Initializer &meta
17
- )
80
+ void ReflectionDatabase::AddGlobal (const std::string &name, GlobalType *globalGetter, GlobalType *globalSetter, const MetaManager::Initializer &meta)
18
81
{
82
+ typedef GlobalGetter<GlobalType, false > GlobalGetterType;
83
+ typedef GlobalSetter<GlobalType, false > GlobalSetterType;
84
+
19
85
Global global {
20
86
name,
21
87
typeof ( GlobalType ),
22
- getter ,
23
- setter
88
+ !globalGetter ? nullptr : new GlobalGetterType ( globalGetter ) ,
89
+ !globalSetter ? nullptr : new GlobalSetterType ( globalSetter )
24
90
};
25
91
26
92
global.m_meta = meta;
27
93
28
94
globals.emplace ( name, global );
29
95
}
30
96
97
+ // /////////////////////////////////////////////////////////////////////
98
+
31
99
template <typename FunctionType>
32
100
void ReflectionDatabase::AddGlobalFunction (
33
101
const std::string &name,
0 commit comments