blob: ee8f0dddac205d874497af46f691c03db6b97c52 [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;
14 {{ endfor }}
15 virtual void override_flag(std::string const&, bool) \{}
16
17 virtual void reset_overrides() \{}
18};
19
20extern std::unique_ptr<flag_provider_interface> provider_;
21{{ for item in class_elements}}
22extern std::string const {item.uppercase_flag_name};{{ endfor }}
23{{ for item in class_elements}}
24inline bool {item.flag_name}() \{
25 {{ if for_prod }}
26 {{ if not item.readwrite- }}
27 return {item.default_value};
28 {{ -else- }}
29 return provider_->{item.flag_name}();
30 {{ -endif }}
31 {{ -else- }}
32 return provider_->{item.flag_name}();
33 {{ -endif }}
34}
35{{ endfor }}
36inline void override_flag(std::string const& name, bool val) \{
37 return provider_->override_flag(name, val);
38}
39
40inline void reset_overrides() \{
41 return provider_->reset_overrides();
42}
43
44}
45#endif