From 6a34ac20e8c21ef46deccefa3d935d3947b49643 Mon Sep 17 00:00:00 2001 From: Jahan Addison Date: Tue, 30 Dec 2025 17:25:55 -0500 Subject: [PATCH 1/2] Add enum class and nested enumeration example --- sample/Enum-Class.cpp | 44 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 sample/Enum-Class.cpp diff --git a/sample/Enum-Class.cpp b/sample/Enum-Class.cpp new file mode 100644 index 0000000..d98a420 --- /dev/null +++ b/sample/Enum-Class.cpp @@ -0,0 +1,44 @@ +#include "matchit.h" +#include + +enum class OS_Type +{ + Linux, + BSD +}; + +enum class Arch_Type +{ + ARM64, + X8664 +}; + +int +get_sample_write_syscode_code(OS_Type os_type, Arch_Type arch_type) +{ + namespace m = matchit; + return m::match(os_type)( + m::pattern | OS_Type::BSD = + [&] { + return m::match(arch_type)( + m::pattern | Arch_Type::ARM64 = [&] { return 1; }, + m::pattern | Arch_Type::X8664 = [&] { return 4; }, + m::pattern | m::_ = [&] { return 1; }); + }, + m::pattern | OS_Type::Linux = + [&] { + return m::match(arch_type)( + m::pattern | Arch_Type::ARM64 = [&] { return 2; }, + m::pattern | Arch_Type::X8664 = [&] { return 5; }, + m::pattern | m::_ = [&] { return 1; }); + }, + m::pattern | m::_ = [&] { return 1; }); +} + +int32_t +main() +{ + std::cout << "sample write(3) syscode for linux arm64: " + << get_sample_write_syscode_code(OS_Type::Linux, Arch_Type::ARM64) + << std::endl; +} From e9c87ed5f306f268679b380978c61205a8fe929a Mon Sep 17 00:00:00 2001 From: Jahan Addison Date: Tue, 30 Dec 2025 19:58:37 -0500 Subject: [PATCH 2/2] Add dependent and independent enum class case examples --- sample/Enum-Class.cpp | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/sample/Enum-Class.cpp b/sample/Enum-Class.cpp index d98a420..37aac2f 100644 --- a/sample/Enum-Class.cpp +++ b/sample/Enum-Class.cpp @@ -17,28 +17,38 @@ int get_sample_write_syscode_code(OS_Type os_type, Arch_Type arch_type) { namespace m = matchit; + + // Dependent enum case example: return m::match(os_type)( m::pattern | OS_Type::BSD = [&] { - return m::match(arch_type)( - m::pattern | Arch_Type::ARM64 = [&] { return 1; }, - m::pattern | Arch_Type::X8664 = [&] { return 4; }, - m::pattern | m::_ = [&] { return 1; }); + return m::match(arch_type)(m::pattern | Arch_Type::ARM64 = 1, + m::pattern | Arch_Type::X8664 = 4, + m::pattern | m::_ = 1); }, m::pattern | OS_Type::Linux = [&] { - return m::match(arch_type)( - m::pattern | Arch_Type::ARM64 = [&] { return 2; }, - m::pattern | Arch_Type::X8664 = [&] { return 5; }, - m::pattern | m::_ = [&] { return 1; }); + return m::match(arch_type)(m::pattern | Arch_Type::ARM64 = 2, + m::pattern | Arch_Type::X8664 = 5, + m::pattern | m::_ = 1); }, - m::pattern | m::_ = [&] { return 1; }); + m::pattern | m::_ = 1); } int32_t main() { - std::cout << "sample write(3) syscode for linux arm64: " + // Independent enum case example: + auto independent_sample = m::match(os_type, arch_type)( + m::pattern | m::ds(OS_Type::Linux, Arch_Type::ARM64) = 2, + m::pattern | m::ds(OS_Type::Linux, Arch_Type::X8664) = 5, + m::pattern | m::ds(OS_Type::BSD, Arch_Type::X8664) = 4, + m::pattern | m::_ = 1); + + std::cout << "independent write(3) enum case example: " << independent_sample + << std::endl; + + std::cout << "dependent write(3) enum case example: " << get_sample_write_syscode_code(OS_Type::Linux, Arch_Type::ARM64) << std::endl; }