From b4bb1f3dc7767004dee83b50533466b203f23aff Mon Sep 17 00:00:00 2001 From: malleoz Date: Thu, 7 Aug 2025 23:35:35 -0400 Subject: [PATCH] Add enum parse() compatibility --- include/Common.hh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/include/Common.hh b/include/Common.hh index 2de24847..726201bf 100644 --- a/include/Common.hh +++ b/include/Common.hh @@ -398,7 +398,7 @@ template concept IntegralType = std::is_integral_v; template -concept ParseableType = std::is_integral_v || +concept ParseableType = std::is_integral_v || std::is_enum_v || (std::is_floating_point_v && (sizeof(T) == 4 || sizeof(T) == 8)); // Form data into integral value @@ -416,6 +416,11 @@ template static inline constexpr T parse(T val, std::endian endian = std::endian::big) { if constexpr (std::is_integral_v) { return endian == std::endian::native ? val : std::byteswap(val); + } else if constexpr (std::is_enum_v) { + return endian == std::endian::native ? + val : + static_cast(std::byteswap(static_cast>(val))); + } else { if constexpr (sizeof(T) == 4) { return std::bit_cast(parse(std::bit_cast(val), endian));