#pragma once #ifdef __cplusplus #include namespace {cpp_namespace} \{ class flag_provider_interface \{ public: virtual ~flag_provider_interface() = default; {{ for item in class_elements}} virtual bool {item.flag_name}() = 0; {{ if for_test }} virtual void {item.flag_name}(bool val) = 0; {{ -endif }} {{ endfor }} {{ if for_test }} virtual void reset_flags() \{} {{ -endif }} }; extern std::unique_ptr provider_; {{ for item in class_elements}} inline bool {item.flag_name}() \{ {{ if for_test }} return provider_->{item.flag_name}(); {{ -else- }} {{ if not item.readwrite- }} return {item.default_value}; {{ -else- }} return provider_->{item.flag_name}(); {{ -endif }} {{ -endif }} } {{ if for_test }} inline void {item.flag_name}(bool val) \{ provider_->{item.flag_name}(val); } {{ -endif }} {{ endfor }} {{ if for_test }} inline void reset_flags() \{ return provider_->reset_flags(); } {{ -endif }} } extern "C" \{ #endif // __cplusplus {{ for item in class_elements }} bool {header}_{item.flag_name}(); {{ if for_test }} void set_{header}_{item.flag_name}(bool val); {{ -endif }} {{ endfor - }} {{ if for_test }} void {header}_reset_flags(); {{ -endif }} #ifdef __cplusplus } // extern "C" #endif