#ifndef {header}_flag_provider_HEADER_H #define {header}_flag_provider_HEADER_H #include "{header}.h" {{ if readwrite }} #include using namespace server_configurable_flags; {{ endif }} #include #include #include namespace {cpp_namespace} \{ class flag_provider : public flag_provider_interface \{ private: std::unordered_map overrides_; std::unordered_set flag_names_; public: flag_provider() : overrides_(), flag_names_() \{ {{ for item in class_elements}} flag_names_.insert({item.uppercase_flag_name});{{ endfor }} } {{ for item in class_elements}} virtual bool {item.flag_name}() override \{ auto it = overrides_.find({item.uppercase_flag_name}); if (it != overrides_.end()) \{ return it->second; } else \{ {{ if item.readwrite- }} return GetServerConfigurableFlag( "{item.device_config_namespace}", "{item.device_config_flag}", "{item.default_value}") == "true"; {{ -else- }} return {item.default_value}; {{ -endif }} } } {{ endfor }} virtual void override_flag(std::string const& flag, bool val) override \{ assert(flag_names_.count(flag)); overrides_[flag] = val; } virtual void reset_overrides() override \{ overrides_.clear(); } }; } #endif