• 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    {{ -if is_test_mode }}
31    virtual void {item.flag_name}(bool val) = 0;
32    {{ -endif }}
33    {{ -endfor }}
34
35    {{ -if is_test_mode }}
36    virtual void reset_flags() \{}
37    {{ -endif }}
38};
39
40extern std::unique_ptr<flag_provider_interface> provider_;
41
42{{ for item in class_elements}}
43inline bool {item.flag_name}() \{
44    {{ -if is_test_mode }}
45    return provider_->{item.flag_name}();
46    {{ -else }}
47    {{ -if item.readwrite }}
48    return provider_->{item.flag_name}();
49    {{ -else }}
50    {{ -if item.is_fixed_read_only }}
51    return {package_macro}_{item.flag_macro};
52    {{ -else }}
53    return {item.default_value};
54    {{ -endif }}
55    {{ -endif }}
56    {{ -endif }}
57}
58
59{{ -if is_test_mode }}
60inline void {item.flag_name}(bool val) \{
61    provider_->{item.flag_name}(val);
62}
63{{ -endif }}
64{{ -endfor }}
65
66{{ -if is_test_mode }}
67inline void reset_flags() \{
68    return provider_->reset_flags();
69}
70{{ -endif }}
71
72}
73
74extern "C" \{
75#endif // __cplusplus
76
77{{ for item in class_elements }}
78bool {header}_{item.flag_name}();
79
80{{ -if is_test_mode }}
81void set_{header}_{item.flag_name}(bool val);
82{{ -endif }}
83{{ -endfor }}
84
85{{ -if is_test_mode }}
86void {header}_reset_flags();
87{{ -endif }}
88
89#ifdef __cplusplus
90} // extern "C"
91#endif
92
93