Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 41 additions & 1 deletion cppwinrt/settings.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,46 @@

namespace cppwinrt
{
struct module_filter_type
{
module_filter_type() = default;

module_filter_type(std::set<std::string> const& include, std::set<std::string> 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 <typename T>
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<std::string> input;
Expand Down Expand Up @@ -36,7 +76,7 @@ namespace cppwinrt

std::set<std::string> module_include;
std::set<std::string> module_exclude;
winmd::reader::filter module_filter;
module_filter_type module_filter;
};

extern settings_type settings;
Expand Down