blob: a24116b7e151bd972def47606a4743cb07cd9bad [file] [log] [blame]
Dennis Shen8d544f72023-06-29 00:45:42 +00001#ifndef {header}_flag_provider_HEADER_H
2#define {header}_flag_provider_HEADER_H
3#include "{header}.h"
4
Dennis Shene3981442023-07-10 18:15:42 +00005{{ if readwrite }}
6#include <server_configurable_flags/get_flags.h>
7using namespace server_configurable_flags;
8{{ endif }}
9
Dennis Shen8d544f72023-06-29 00:45:42 +000010#include <unordered_map>
11#include <unordered_set>
12#include <cassert>
13
14namespace {cpp_namespace} \{
15class flag_provider : public flag_provider_interface \{
16private:
17 std::unordered_map<std::string, bool> overrides_;
18 std::unordered_set<std::string> flag_names_;
19
20public:
21 flag_provider()
22 : overrides_(),
23 flag_names_() \{
24 {{ for item in class_elements}}
25 flag_names_.insert({item.uppercase_flag_name});{{ endfor }}
26 }
27 {{ for item in class_elements}}
28 virtual bool {item.flag_name}() override \{
29 auto it = overrides_.find({item.uppercase_flag_name});
30 if (it != overrides_.end()) \{
31 return it->second;
32 } else \{
33 {{ if item.readwrite- }}
34 return GetServerConfigurableFlag(
35 "{item.device_config_namespace}",
36 "{item.device_config_flag}",
37 "{item.default_value}") == "true";
38 {{ -else- }}
39 return {item.default_value};
40 {{ -endif }}
41 }
42 }
43 {{ endfor }}
44 virtual void override_flag(std::string const& flag, bool val) override \{
45 assert(flag_names_.count(flag));
46 overrides_[flag] = val;
47 }
48
49 virtual void reset_overrides() override \{
50 overrides_.clear();
51 }
52};
53}
54#endif