blob: bd597e77220f9200994b5d667f718a9364c45fb3 [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
5#include <unordered_map>
6#include <unordered_set>
7#include <cassert>
8
9namespace {cpp_namespace} \{
10class flag_provider : public flag_provider_interface \{
11private:
12 std::unordered_map<std::string, bool> overrides_;
13 std::unordered_set<std::string> flag_names_;
14
15public:
16 flag_provider()
17 : overrides_(),
18 flag_names_() \{
19 {{ for item in class_elements}}
20 flag_names_.insert({item.uppercase_flag_name});{{ endfor }}
21 }
22 {{ for item in class_elements}}
23 virtual bool {item.flag_name}() override \{
24 auto it = overrides_.find({item.uppercase_flag_name});
25 if (it != overrides_.end()) \{
26 return it->second;
27 } else \{
28 {{ if item.readwrite- }}
29 return GetServerConfigurableFlag(
30 "{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 }
38 {{ endfor }}
39 virtual void override_flag(std::string const& flag, bool val) override \{
40 assert(flag_names_.count(flag));
41 overrides_[flag] = val;
42 }
43
44 virtual void reset_overrides() override \{
45 overrides_.clear();
46 }
47};
48}
49#endif