Skip to content

Commit 94e6f16

Browse files
Update globals
1 parent 6f2bb8c commit 94e6f16

File tree

4 files changed

+111
-24
lines changed

4 files changed

+111
-24
lines changed

Resources/Templates/module-file-source.mustache

+4-10
Original file line numberDiff line numberDiff line change
@@ -82,16 +82,10 @@ void meta_generated::DefineModuleFile{{targetName}}{{moduleFileName}}(m::Reflect
8282
// Global Definitions
8383
///////////////////////////////////////////////////////////////////////////
8484
{{#global}}
85-
db.AddGlobal<{{& type}}>( "{{& qualifiedName}}",{{#isGetterAccessible}}
86-
[](void)
87-
{
88-
return m::Variant { {{> getterBody}} };
89-
},{{/isGetterAccessible}}{{^isGetterAccessible}}
90-
nullptr,{{/isGetterAccessible}}{{#isSetterAccessible}}
91-
[](const m::Argument &value)
92-
{
93-
{{> setterBody}}
94-
},{{/isSetterAccessible}}{{^isSetterAccessible}}
85+
db.AddGlobal<{{& type}}>( "{{& qualifiedName}}",
86+
{{#isGetterAccessible}}{{> getterBody}},{{/isGetterAccessible}}{{^isGetterAccessible}}
87+
nullptr,{{/isGetterAccessible}}{{#isSetterAccessible}}
88+
{{> setterBody}},{{/isSetterAccessible}}{{^isSetterAccessible}}
9589
nullptr,{{/isSetterAccessible}}
9690
{
9791
{{> metaDataInitializerList}}

Source/Runtime/Global.h

-3
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,6 @@ namespace ursine
2020
class Global : public MetaContainer
2121
{
2222
public:
23-
typedef std::function<Variant(void)> Getter;
24-
typedef std::function<void(const Argument &)> Setter;
25-
2623
Global(void);
2724

2825
Global(

Source/Runtime/Impl/ReflectionDatabase.hpp

+76-8
Original file line numberDiff line numberDiff line change
@@ -8,26 +8,94 @@ namespace ursine
88
{
99
namespace meta
1010
{
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+
1179
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)
1881
{
82+
typedef GlobalGetter<GlobalType, false> GlobalGetterType;
83+
typedef GlobalSetter<GlobalType, false> GlobalSetterType;
84+
1985
Global global {
2086
name,
2187
typeof( GlobalType ),
22-
getter,
23-
setter
88+
!globalGetter ? nullptr : new GlobalGetterType( globalGetter ),
89+
!globalSetter ? nullptr : new GlobalSetterType( globalSetter )
2490
};
2591

2692
global.m_meta = meta;
2793

2894
globals.emplace( name, global );
2995
}
3096

97+
///////////////////////////////////////////////////////////////////////
98+
3199
template<typename FunctionType>
32100
void ReflectionDatabase::AddGlobalFunction(
33101
const std::string &name,

Source/Runtime/ReflectionDatabase.h

+31-3
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,39 @@ namespace ursine
4646
////////////////////////////////////////////////////////////////////////
4747
////////////////////////////////////////////////////////////////////////
4848

49+
// Function Getter, Function Setter
50+
template<typename GlobalType, typename GetterType, typename SetterType>
51+
void AddGlobal(
52+
const std::string &name,
53+
GetterType getter,
54+
SetterType setter,
55+
const MetaManager::Initializer &meta
56+
);
57+
58+
// Function Getter, Raw Setter
59+
template<typename GlobalType, typename GetterType>
60+
void AddGlobal(
61+
const std::string &name,
62+
GetterType getter,
63+
GlobalType *globalSetter,
64+
const MetaManager::Initializer &meta
65+
);
66+
67+
// Raw Getter, Function Setter
68+
template<typename GlobalType, typename SetterType>
69+
void AddGlobal(
70+
const std::string &name,
71+
GlobalType *globalGetter,
72+
SetterType setter,
73+
const MetaManager::Initializer &meta
74+
);
75+
76+
// Raw Getter, Raw Setter
4977
template<typename GlobalType>
5078
void AddGlobal(
51-
const std::string &name,
52-
Global::Getter getter,
53-
Global::Setter setter,
79+
const std::string &name,
80+
GlobalType *globalGetter,
81+
GlobalType *globalSetter,
5482
const MetaManager::Initializer &meta
5583
);
5684

0 commit comments

Comments
 (0)