blob: cd0185362e888bd304c6a8255a85e56ec0b49e75 [file] [log] [blame]
Dennis Shen5c242132023-07-14 14:57:08 +00001#pragma once
Dennis Shen8d544f72023-06-29 00:45:42 +00002
Dennis Shen8d544f72023-06-29 00:45:42 +00003#include <memory>
Dennis Shene3981442023-07-10 18:15:42 +00004
Dennis Shen8d544f72023-06-29 00:45:42 +00005namespace {cpp_namespace} \{
6
7class flag_provider_interface \{
8public:
9 virtual ~flag_provider_interface() = default;
10 {{ for item in class_elements}}
11 virtual bool {item.flag_name}() = 0;
Dennis Shen8d544f72023-06-29 00:45:42 +000012
Dennis Shen17a08eec2023-07-14 01:32:50 +000013 {{ if for_test }}
14 virtual void {item.flag_name}(bool val) = 0;
15 {{ -endif }}
16 {{ endfor }}
17
18 {{ if for_test }}
19 virtual void reset_flags() \{}
20 {{ -endif }}
Dennis Shen8d544f72023-06-29 00:45:42 +000021};
22
23extern std::unique_ptr<flag_provider_interface> provider_;
Dennis Shen17a08eec2023-07-14 01:32:50 +000024
Dennis Shen8d544f72023-06-29 00:45:42 +000025{{ for item in class_elements}}
26inline bool {item.flag_name}() \{
Dennis Shen17a08eec2023-07-14 01:32:50 +000027 {{ if for_test }}
28 return provider_->{item.flag_name}();
29 {{ -else- }}
Dennis Shen8d544f72023-06-29 00:45:42 +000030 {{ if not item.readwrite- }}
31 return {item.default_value};
32 {{ -else- }}
33 return provider_->{item.flag_name}();
34 {{ -endif }}
Dennis Shen8d544f72023-06-29 00:45:42 +000035 {{ -endif }}
36}
Dennis Shen17a08eec2023-07-14 01:32:50 +000037
38{{ if for_test }}
39inline void {item.flag_name}(bool val) \{
40 provider_->{item.flag_name}(val);
41}
42{{ -endif }}
Dennis Shen8d544f72023-06-29 00:45:42 +000043{{ endfor }}
Dennis Shen8d544f72023-06-29 00:45:42 +000044
Dennis Shen17a08eec2023-07-14 01:32:50 +000045{{ if for_test }}
46inline void reset_flags() \{
47 return provider_->reset_flags();
Dennis Shen8d544f72023-06-29 00:45:42 +000048}
Dennis Shen17a08eec2023-07-14 01:32:50 +000049{{ -endif }}
Dennis Shen8d544f72023-06-29 00:45:42 +000050}