1#pragma once 2 3{{ if not is_test_mode- }} 4{{ if has_fixed_read_only- }} 5#ifndef {package_macro} 6#define {package_macro}(FLAG) {package_macro}_##FLAG 7#endif 8{{ for item in class_elements }} 9{{ -if item.is_fixed_read_only }} 10#ifndef {package_macro}_{item.flag_macro} 11#define {package_macro}_{item.flag_macro} {item.default_value} 12#endif 13{{ -endif }} 14{{ -endfor }} 15{{ -endif }} 16{{ -endif }} 17 18#ifdef __cplusplus 19 20#include <memory> 21 22namespace {cpp_namespace} \{ 23 24class flag_provider_interface \{ 25public: 26 virtual ~flag_provider_interface() = default; 27 {{ -for item in class_elements}} 28 virtual bool {item.flag_name}() = 0; 29 30 {{ -endfor }} 31 32 {{ -if is_test_mode }} 33 {{ -for item in class_elements}} 34 virtual void {item.flag_name}(bool val) = 0; 35 {{ -endfor }} 36 37 virtual void reset_flags() \{} 38 {{ -endif }} 39}; 40 41extern std::unique_ptr<flag_provider_interface> provider_; 42 43{{ for item in class_elements}} 44{{ if not is_test_mode }}{{ if item.is_fixed_read_only }}constexpr {{ endif }}{{ endif -}} 45inline bool {item.flag_name}() \{ 46 {{ -if is_test_mode }} 47 return provider_->{item.flag_name}(); 48 {{ -else }} 49 {{ -if item.readwrite }} 50 return provider_->{item.flag_name}(); 51 {{ -else }} 52 {{ -if item.is_fixed_read_only }} 53 return {package_macro}_{item.flag_macro}; 54 {{ -else }} 55 return {item.default_value}; 56 {{ -endif }} 57 {{ -endif }} 58 {{ -endif }} 59} 60 61{{ -if is_test_mode }} 62inline void {item.flag_name}(bool val) \{ 63 provider_->{item.flag_name}(val); 64} 65{{ -endif }} 66{{ -endfor }} 67 68{{ -if is_test_mode }} 69inline void reset_flags() \{ 70 return provider_->reset_flags(); 71} 72{{ -endif }} 73 74} 75 76extern "C" \{ 77#endif // __cplusplus 78 79{{ for item in class_elements }} 80bool {header}_{item.flag_name}(); 81 82{{ -if is_test_mode }} 83void set_{header}_{item.flag_name}(bool val); 84{{ -endif }} 85{{ -endfor }} 86 87{{ -if is_test_mode }} 88void {header}_reset_flags(); 89{{ -endif }} 90 91#ifdef __cplusplus 92} // extern "C" 93#endif 94 95