blob: e45548e9a3e32097a431f2afe28981ecd3648b7b [file] [log] [blame]
Dennis Shen8d544f72023-06-29 00:45:42 +00001#ifndef {header}_HEADER_H
2#define {header}_HEADER_H
3
4#include <string>
5#include <memory>
Dennis Shene3981442023-07-10 18:15:42 +00006
Dennis Shen8d544f72023-06-29 00:45:42 +00007namespace {cpp_namespace} \{
8
9class flag_provider_interface \{
10public:
11 virtual ~flag_provider_interface() = default;
12 {{ for item in class_elements}}
13 virtual bool {item.flag_name}() = 0;
Dennis Shen8d544f72023-06-29 00:45:42 +000014
Dennis Shen17a08eec2023-07-14 01:32:50 +000015 {{ if for_test }}
16 virtual void {item.flag_name}(bool val) = 0;
17 {{ -endif }}
18 {{ endfor }}
19
20 {{ if for_test }}
21 virtual void reset_flags() \{}
22 {{ -endif }}
Dennis Shen8d544f72023-06-29 00:45:42 +000023};
24
25extern std::unique_ptr<flag_provider_interface> provider_;
Dennis Shen17a08eec2023-07-14 01:32:50 +000026
Dennis Shen8d544f72023-06-29 00:45:42 +000027{{ for item in class_elements}}
28inline bool {item.flag_name}() \{
Dennis Shen17a08eec2023-07-14 01:32:50 +000029 {{ if for_test }}
30 return provider_->{item.flag_name}();
31 {{ -else- }}
Dennis Shen8d544f72023-06-29 00:45:42 +000032 {{ if not item.readwrite- }}
33 return {item.default_value};
34 {{ -else- }}
35 return provider_->{item.flag_name}();
36 {{ -endif }}
Dennis Shen8d544f72023-06-29 00:45:42 +000037 {{ -endif }}
38}
Dennis Shen17a08eec2023-07-14 01:32:50 +000039
40{{ if for_test }}
41inline void {item.flag_name}(bool val) \{
42 provider_->{item.flag_name}(val);
43}
44{{ -endif }}
Dennis Shen8d544f72023-06-29 00:45:42 +000045{{ endfor }}
Dennis Shen8d544f72023-06-29 00:45:42 +000046
Dennis Shen17a08eec2023-07-14 01:32:50 +000047{{ if for_test }}
48inline void reset_flags() \{
49 return provider_->reset_flags();
Dennis Shen8d544f72023-06-29 00:45:42 +000050}
Dennis Shen17a08eec2023-07-14 01:32:50 +000051{{ -endif }}
Dennis Shen8d544f72023-06-29 00:45:42 +000052}
53#endif