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
|
#ifndef CFGINTERNALS_H
#define CFGINTERNALS_H
#include "config_builder/cfgmain.h"
#include "config_builder/cfgcategory.h"
#include "config_builder/cfgentry.h"
#include "config_builder/cfglazyinitializer.h"
#define CFG_CATEGORIES(Type,Body) _CFG_CATEGORIES_WITH_METANAME_AND_TITLE(Type,Body,"",QString(),API_EXPORT)
#define CFG_CATEGORY(Name,Body) \
_CFG_CATEGORY_WITH_TITLE(Name,Body,QString())
#define CFG_ENTRY(Type, Name, ...) CfgTypedEntry<Type> Name = CfgTypedEntry<Type>(#Name, ##__VA_ARGS__);
#define CFG_DEFINE(Type) _CFG_DEFINE(Type, true)
#define CFG_DEFINE_RUNTIME(Type) _CFG_DEFINE(Type, false)
#define CFG_LOCAL(Type, Name) Cfg::Type Name = Cfg::Type(false);
#define CFG_LOCAL_PERSISTABLE(Type, Name) Cfg::Type Name = Cfg::Type(true);
#define CFG_DEFINE_LAZY(Type) \
namespace Cfg\
{\
Type* cfgMainInstance##Type = nullptr;\
void init##Type##Instance()\
{\
cfgMainInstance##Type = new Type(true);\
}\
Type* get##Type##Instance()\
{\
return cfgMainInstance##Type;\
}\
CfgLazyInitializer* cfgMainInstance##Type##LazyInit = new CfgLazyInitializer(init##Type##Instance, #Type);\
}
#define CFG_INSTANCE(Type) (*Cfg::get##Type##Instance())
#define CFG_DELETE_INSTANCE(Type) \
if (Cfg::cfgMainInstance##Type) \
delete Cfg::cfgMainInstance##Type; \
Cfg::cfgMainInstance##Type = nullptr;
// Macros below are kind of private. You should not need to use them explicitly.
// They are called from macros above.
#define _CFG_CATEGORIES_WITH_METANAME(Type,Body,MetaName) \
_CFG_CATEGORIES_WITH_METANAME_AND_TITLE(Type,Body,MetaName,QString(),API_EXPORT)
#define _CFG_CATEGORIES_WITH_TITLE(Type,Body,Title) \
_CFG_CATEGORIES_WITH_METANAME_AND_TITLE(Type,Body,"",Title,API_EXPORT)
#define _CFG_CATEGORIES_WITH_METANAME_AND_TITLE(Type,Body,MetaName,Title,ExportType) \
namespace Cfg\
{\
struct ExportType Type : public CfgMain\
{\
Type(bool persistable) : CfgMain(#Type, persistable, MetaName, Title) {}\
Body\
};\
ExportType Type* get##Type##Instance();\
}
#define _CFG_DEFINE(Type, Persistant) \
namespace Cfg\
{\
Type* cfgMainInstance##Type = new Type(Persistant);\
Type* get##Type##Instance()\
{\
return cfgMainInstance##Type;\
}\
}
#define _CFG_CATEGORY_WITH_TITLE(Name,Body,Title) \
struct API_EXPORT _##Name##Type : public CfgCategory\
{\
_##Name##Type() : CfgCategory(#Name, Title) {}\
Body\
};\
_##Name##Type Name;
#endif // CFGINTERNALS_H
|