From 9937dfadea43308617c3d29b56ed2242a24ffdba Mon Sep 17 00:00:00 2001 From: hoshiizumiya Date: Sat, 12 Sep 2026 12:00:55 +0800 Subject: [PATCH] Fix exclude-only C++/WinRT module filtering --- cppwinrt/settings.h | 42 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/cppwinrt/settings.h b/cppwinrt/settings.h index 110e64917..c4f129319 100644 --- a/cppwinrt/settings.h +++ b/cppwinrt/settings.h @@ -2,6 +2,46 @@ namespace cppwinrt { + struct module_filter_type + { + module_filter_type() = default; + + module_filter_type(std::set const& include, std::set const& exclude) : + m_has_include(!include.empty()), + m_has_exclude(!exclude.empty()), + m_include_filter{ include, exclude }, + m_exclude_filter{ exclude, {} } + { + } + + bool empty() const noexcept + { + return !m_has_include && !m_has_exclude; + } + + template + bool includes(T const& value) const + { + if (m_has_include) + { + return m_include_filter.includes(value); + } + + if (m_has_exclude) + { + return !m_exclude_filter.includes(value); + } + + return true; + } + + private: + bool m_has_include{}; + bool m_has_exclude{}; + winmd::reader::filter m_include_filter; + winmd::reader::filter m_exclude_filter; + }; + struct settings_type { std::set input; @@ -36,7 +76,7 @@ namespace cppwinrt std::set module_include; std::set module_exclude; - winmd::reader::filter module_filter; + module_filter_type module_filter; }; extern settings_type settings;