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 {{ -if is_test_mode }} 31 virtual void {item.flag_name}(bool val) = 0; 32 {{ -endif }} 33 {{ -endfor }} 34 35 {{ -if is_test_mode }} 36 virtual void reset_flags() \{} 37 {{ -endif }} 38}; 39 40extern std::unique_ptr<flag_provider_interface> provider_; 41 42{{ for item in class_elements}} 43inline bool {item.flag_name}() \{ 44 {{ -if is_test_mode }} 45 return provider_->{item.flag_name}(); 46 {{ -else }} 47 {{ -if item.readwrite }} 48 return provider_->{item.flag_name}(); 49 {{ -else }} 50 {{ -if item.is_fixed_read_only }} 51 return {package_macro}_{item.flag_macro}; 52 {{ -else }} 53 return {item.default_value}; 54 {{ -endif }} 55 {{ -endif }} 56 {{ -endif }} 57} 58 59{{ -if is_test_mode }} 60inline void {item.flag_name}(bool val) \{ 61 provider_->{item.flag_name}(val); 62} 63{{ -endif }} 64{{ -endfor }} 65 66{{ -if is_test_mode }} 67inline void reset_flags() \{ 68 return provider_->reset_flags(); 69} 70{{ -endif }} 71 72} 73 74extern "C" \{ 75#endif // __cplusplus 76 77{{ for item in class_elements }} 78bool {header}_{item.flag_name}(); 79 80{{ -if is_test_mode }} 81void set_{header}_{item.flag_name}(bool val); 82{{ -endif }} 83{{ -endfor }} 84 85{{ -if is_test_mode }} 86void {header}_reset_flags(); 87{{ -endif }} 88 89#ifdef __cplusplus 90} // extern "C" 91#endif 92 93