KIDS
ver-0.0.1
KIDS : Kernel Integrated Dynamics Simulator
Loading...
Searching...
No Matches
Policy.h
Go to the documentation of this file.
1
#ifndef POLICY_H
2
#define POLICY_H
3
4
#include <map>
5
#include <string>
6
7
#define VAR_NAME(x) #x
8
#define CAT_NAME(x, y) x##y
9
#define SELECT_NAME(NAME, NUM) CAT_NAME(NAME##_, NUM)
10
#define ARG_COUNT(...) \
11
ARG_COUNT_PRIVATE_IMPL(0, ##__VA_ARGS__, \
12
50, 49, 48, 47, 46, 45, 44, 43, 42, 41, \
13
40, 39, 38, 37, 36, 35, 34, 33, 32, 31, \
14
30, 29, 28, 27, 26, 25, 24, 23, 22, 21, \
15
20, 19, 18, 17, 16, 15, 14, 13, 12, 11, \
16
10, 9, 8, 7, 6, 5, 4, 3, 2, 1, \
17
0)
18
19
#define ARG_COUNT_PRIVATE_IMPL(_0, \
20
_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, \
21
_11, _12, _13, _14, _15, _16, _17, _18, _19, _20, \
22
_21, _22, _23, _24, _25, _26, _27, _28, _29, _30, \
23
_31, _32, _33, _34, _35, _36, _37, _38, _39, _40, \
24
_41, _42, _43, _44, _45, _46, _47, _48, _49, _50, \
25
count, ...) \
26
count
27
#define VA_SELECT(NAME, ...) SELECT_NAME(NAME, ARG_COUNT(__VA_ARGS__))(__VA_ARGS__)
28
29
#define KV_TERMS_50(TERM1, ...) {VAR_NAME(TERM1), TERM1}, KV_TERMS_49(__VA_ARGS__)
30
#define KV_TERMS_49(TERM1, ...) {VAR_NAME(TERM1), TERM1}, KV_TERMS_48(__VA_ARGS__)
31
#define KV_TERMS_48(TERM1, ...) {VAR_NAME(TERM1), TERM1}, KV_TERMS_47(__VA_ARGS__)
32
#define KV_TERMS_47(TERM1, ...) {VAR_NAME(TERM1), TERM1}, KV_TERMS_46(__VA_ARGS__)
33
#define KV_TERMS_46(TERM1, ...) {VAR_NAME(TERM1), TERM1}, KV_TERMS_45(__VA_ARGS__)
34
#define KV_TERMS_45(TERM1, ...) {VAR_NAME(TERM1), TERM1}, KV_TERMS_44(__VA_ARGS__)
35
#define KV_TERMS_44(TERM1, ...) {VAR_NAME(TERM1), TERM1}, KV_TERMS_43(__VA_ARGS__)
36
#define KV_TERMS_43(TERM1, ...) {VAR_NAME(TERM1), TERM1}, KV_TERMS_42(__VA_ARGS__)
37
#define KV_TERMS_42(TERM1, ...) {VAR_NAME(TERM1), TERM1}, KV_TERMS_41(__VA_ARGS__)
38
#define KV_TERMS_41(TERM1, ...) {VAR_NAME(TERM1), TERM1}, KV_TERMS_40(__VA_ARGS__)
39
#define KV_TERMS_40(TERM1, ...) {VAR_NAME(TERM1), TERM1}, KV_TERMS_39(__VA_ARGS__)
40
#define KV_TERMS_39(TERM1, ...) {VAR_NAME(TERM1), TERM1}, KV_TERMS_38(__VA_ARGS__)
41
#define KV_TERMS_38(TERM1, ...) {VAR_NAME(TERM1), TERM1}, KV_TERMS_37(__VA_ARGS__)
42
#define KV_TERMS_37(TERM1, ...) {VAR_NAME(TERM1), TERM1}, KV_TERMS_36(__VA_ARGS__)
43
#define KV_TERMS_36(TERM1, ...) {VAR_NAME(TERM1), TERM1}, KV_TERMS_35(__VA_ARGS__)
44
#define KV_TERMS_35(TERM1, ...) {VAR_NAME(TERM1), TERM1}, KV_TERMS_34(__VA_ARGS__)
45
#define KV_TERMS_34(TERM1, ...) {VAR_NAME(TERM1), TERM1}, KV_TERMS_33(__VA_ARGS__)
46
#define KV_TERMS_33(TERM1, ...) {VAR_NAME(TERM1), TERM1}, KV_TERMS_32(__VA_ARGS__)
47
#define KV_TERMS_32(TERM1, ...) {VAR_NAME(TERM1), TERM1}, KV_TERMS_31(__VA_ARGS__)
48
#define KV_TERMS_31(TERM1, ...) {VAR_NAME(TERM1), TERM1}, KV_TERMS_30(__VA_ARGS__)
49
#define KV_TERMS_30(TERM1, ...) {VAR_NAME(TERM1), TERM1}, KV_TERMS_29(__VA_ARGS__)
50
#define KV_TERMS_29(TERM1, ...) {VAR_NAME(TERM1), TERM1}, KV_TERMS_28(__VA_ARGS__)
51
#define KV_TERMS_28(TERM1, ...) {VAR_NAME(TERM1), TERM1}, KV_TERMS_27(__VA_ARGS__)
52
#define KV_TERMS_27(TERM1, ...) {VAR_NAME(TERM1), TERM1}, KV_TERMS_26(__VA_ARGS__)
53
#define KV_TERMS_26(TERM1, ...) {VAR_NAME(TERM1), TERM1}, KV_TERMS_25(__VA_ARGS__)
54
#define KV_TERMS_25(TERM1, ...) {VAR_NAME(TERM1), TERM1}, KV_TERMS_24(__VA_ARGS__)
55
#define KV_TERMS_24(TERM1, ...) {VAR_NAME(TERM1), TERM1}, KV_TERMS_23(__VA_ARGS__)
56
#define KV_TERMS_23(TERM1, ...) {VAR_NAME(TERM1), TERM1}, KV_TERMS_22(__VA_ARGS__)
57
#define KV_TERMS_22(TERM1, ...) {VAR_NAME(TERM1), TERM1}, KV_TERMS_21(__VA_ARGS__)
58
#define KV_TERMS_21(TERM1, ...) {VAR_NAME(TERM1), TERM1}, KV_TERMS_20(__VA_ARGS__)
59
#define KV_TERMS_20(TERM1, ...) {VAR_NAME(TERM1), TERM1}, KV_TERMS_19(__VA_ARGS__)
60
#define KV_TERMS_19(TERM1, ...) {VAR_NAME(TERM1), TERM1}, KV_TERMS_18(__VA_ARGS__)
61
#define KV_TERMS_18(TERM1, ...) {VAR_NAME(TERM1), TERM1}, KV_TERMS_17(__VA_ARGS__)
62
#define KV_TERMS_17(TERM1, ...) {VAR_NAME(TERM1), TERM1}, KV_TERMS_16(__VA_ARGS__)
63
#define KV_TERMS_16(TERM1, ...) {VAR_NAME(TERM1), TERM1}, KV_TERMS_15(__VA_ARGS__)
64
#define KV_TERMS_15(TERM1, ...) {VAR_NAME(TERM1), TERM1}, KV_TERMS_14(__VA_ARGS__)
65
#define KV_TERMS_14(TERM1, ...) {VAR_NAME(TERM1), TERM1}, KV_TERMS_13(__VA_ARGS__)
66
#define KV_TERMS_13(TERM1, ...) {VAR_NAME(TERM1), TERM1}, KV_TERMS_12(__VA_ARGS__)
67
#define KV_TERMS_12(TERM1, ...) {VAR_NAME(TERM1), TERM1}, KV_TERMS_11(__VA_ARGS__)
68
#define KV_TERMS_11(TERM1, ...) {VAR_NAME(TERM1), TERM1}, KV_TERMS_10(__VA_ARGS__)
69
#define KV_TERMS_10(TERM1, ...) {VAR_NAME(TERM1), TERM1}, KV_TERMS_9(__VA_ARGS__)
70
#define KV_TERMS_9(TERM1, ...) {VAR_NAME(TERM1), TERM1}, KV_TERMS_8(__VA_ARGS__)
71
#define KV_TERMS_8(TERM1, ...) {VAR_NAME(TERM1), TERM1}, KV_TERMS_7(__VA_ARGS__)
72
#define KV_TERMS_7(TERM1, ...) {VAR_NAME(TERM1), TERM1}, KV_TERMS_6(__VA_ARGS__)
73
#define KV_TERMS_6(TERM1, ...) {VAR_NAME(TERM1), TERM1}, KV_TERMS_5(__VA_ARGS__)
74
#define KV_TERMS_5(TERM1, ...) {VAR_NAME(TERM1), TERM1}, KV_TERMS_4(__VA_ARGS__)
75
#define KV_TERMS_4(TERM1, ...) {VAR_NAME(TERM1), TERM1}, KV_TERMS_3(__VA_ARGS__)
76
#define KV_TERMS_3(TERM1, ...) {VAR_NAME(TERM1), TERM1}, KV_TERMS_2(__VA_ARGS__)
77
#define KV_TERMS_2(TERM1, ...) {VAR_NAME(TERM1), TERM1}, KV_TERMS_1(__VA_ARGS__)
78
#define KV_TERMS_1(TERM1, ...) \
79
{ VAR_NAME(TERM1), TERM1 }
80
81
#define KV_TERMS(...) VA_SELECT(KV_TERMS, ##__VA_ARGS__)
82
83
#define DEFINE_POLICY(Policy, ...) \
84
namespace Policy { \
85
enum _type { __VA_ARGS__ }; \
86
static const std::map<std::string, _type> _dict = {KV_TERMS(__VA_ARGS__)}; \
87
static inline void _help() { \
88
std::cout << "Helps for " << #Policy << ":\n"; \
89
for (auto& i : _dict) std::cout << i.first << " [available]\n"; \
90
} \
91
static inline _type _from(std::string s) { \
92
try { \
93
return _dict.at(s); \
94
} catch (std::out_of_range & e) { _help(); } \
95
return _type(0); \
96
} \
97
};
// namespace Policy
98
99
#endif
// POLICY_H
home
shin
share
KIDS
src
core
include
kids
Policy.h
Generated on Mon May 27 2024 11:36:31 for KIDS by
1.10.0