• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#pragma once
2
3{{ if not is_test_mode- }}
4{{ if has_fixed_read_only- }}
5#ifndef {package_macro}
6#define {package_macro}(FLAG) {package_macro}_##FLAG
7#endif
8{{ for item in class_elements }}
9{{ -if item.is_fixed_read_only }}
10#ifndef {package_macro}_{item.flag_macro}
11#define {package_macro}_{item.flag_macro} {item.default_value}
12#endif
13{{ -endif }}
14{{ -endfor }}
15{{ -endif }}
16{{ -endif }}
17
18#ifdef __cplusplus
19
20#include <memory>
21
22namespace {cpp_namespace} \{
23
24class flag_provider_interface \{
25public:
26    virtual ~flag_provider_interface() = default;
27    {{ -for item in class_elements}}
28    virtual bool {item.flag_name}() = 0;
29
30    {{ -endfor }}
31
32    {{ -if is_test_mode }}
33    {{ -for item in class_elements}}
34    virtual void {item.flag_name}(bool val) = 0;
35    {{ -endfor }}
36
37    virtual void reset_flags() \{}
38    {{ -endif }}
39};
40
41extern std::unique_ptr<flag_provider_interface> provider_;
42
43{{ for item in class_elements}}
44{{ if not is_test_mode }}{{ if item.is_fixed_read_only }}constexpr {{ endif }}{{ endif -}}
45inline bool {item.flag_name}() \{
46    {{ -if is_test_mode }}
47    return provider_->{item.flag_name}();
48    {{ -else }}
49    {{ -if item.readwrite }}
50    return provider_->{item.flag_name}();
51    {{ -else }}
52    {{ -if item.is_fixed_read_only }}
53    return {package_macro}_{item.flag_macro};
54    {{ -else }}
55    return {item.default_value};
56    {{ -endif }}
57    {{ -endif }}
58    {{ -endif }}
59}
60
61{{ -if is_test_mode }}
62inline void {item.flag_name}(bool val) \{
63    provider_->{item.flag_name}(val);
64}
65{{ -endif }}
66{{ -endfor }}
67
68{{ -if is_test_mode }}
69inline void reset_flags() \{
70    return provider_->reset_flags();
71}
72{{ -endif }}
73
74}
75
76extern "C" \{
77#endif // __cplusplus
78
79{{ for item in class_elements }}
80bool {header}_{item.flag_name}();
81
82{{ -if is_test_mode }}
83void set_{header}_{item.flag_name}(bool val);
84{{ -endif }}
85{{ -endfor }}
86
87{{ -if is_test_mode }}
88void {header}_reset_flags();
89{{ -endif }}
90
91#ifdef __cplusplus
92} // extern "C"
93#endif
94
95