blob: 03f10a524c54a005c80cd0ae827ed1933d7e1815 [file] [log] [blame]
Dennis Shen5c242132023-07-14 14:57:08 +00001#pragma once
2
Dennis Shen8d544f72023-06-29 00:45:42 +00003#include "{header}.h"
4
Dennis Shene3981442023-07-10 18:15:42 +00005{{ if readwrite }}
6#include <server_configurable_flags/get_flags.h>
Dennis Shene3981442023-07-10 18:15:42 +00007{{ endif }}
8
Dennis Shen8d544f72023-06-29 00:45:42 +00009#include <unordered_map>
Dennis Shen5c242132023-07-14 14:57:08 +000010#include <string>
Dennis Shen8d544f72023-06-29 00:45:42 +000011
12namespace {cpp_namespace} \{
13class flag_provider : public flag_provider_interface \{
14private:
15 std::unordered_map<std::string, bool> overrides_;
Dennis Shen8d544f72023-06-29 00:45:42 +000016
17public:
18 flag_provider()
Dennis Shen17a08eec2023-07-14 01:32:50 +000019 : overrides_()
20 \{}
21
Dennis Shen8d544f72023-06-29 00:45:42 +000022 {{ for item in class_elements}}
23 virtual bool {item.flag_name}() override \{
Dennis Shen17a08eec2023-07-14 01:32:50 +000024 auto it = overrides_.find("{item.flag_name}");
Dennis Shen8d544f72023-06-29 00:45:42 +000025 if (it != overrides_.end()) \{
26 return it->second;
27 } else \{
28 {{ if item.readwrite- }}
Dennis Shen5c242132023-07-14 14:57:08 +000029 return server_configurable_flags::GetServerConfigurableFlag(
Dennis Shen8d544f72023-06-29 00:45:42 +000030 "{item.device_config_namespace}",
31 "{item.device_config_flag}",
32 "{item.default_value}") == "true";
33 {{ -else- }}
34 return {item.default_value};
35 {{ -endif }}
36 }
37 }
Dennis Shen8d544f72023-06-29 00:45:42 +000038
Dennis Shen17a08eec2023-07-14 01:32:50 +000039 virtual void {item.flag_name}(bool val) override \{
40 overrides_["{item.flag_name}"] = val;
41 }
42 {{ endfor }}
43
44 virtual void reset_flags() override \{
Dennis Shen8d544f72023-06-29 00:45:42 +000045 overrides_.clear();
46 }
47};
48}