From bbde689a1632dbbd17f9d0b02e88b69d8f93e588 Mon Sep 17 00:00:00 2001 From: emeric Date: Sat, 6 Dec 2025 22:24:30 +0100 Subject: [PATCH] Added size() method --- src/libs/core/include/core/EnumSet.hpp | 6 ++++++ src/libs/core/test/EnumSet.cpp | 12 ++++++++++++ 2 files changed, 18 insertions(+) diff --git a/src/libs/core/include/core/EnumSet.hpp b/src/libs/core/include/core/EnumSet.hpp index dc035610..c2ec5c73 100644 --- a/src/libs/core/include/core/EnumSet.hpp +++ b/src/libs/core/include/core/EnumSet.hpp @@ -19,6 +19,7 @@ #pragma once +#include #include #include #include @@ -51,6 +52,11 @@ namespace lms::core assign(begin, end); } + constexpr std::size_t size() const + { + return std::popcount(_bitfield); + } + template constexpr void assign(It begin, It end) { diff --git a/src/libs/core/test/EnumSet.cpp b/src/libs/core/test/EnumSet.cpp index cc37ce8e..6679ccae 100644 --- a/src/libs/core/test/EnumSet.cpp +++ b/src/libs/core/test/EnumSet.cpp @@ -31,9 +31,19 @@ namespace lms::core Two, }; + { + constexpr EnumSet test; + + static_assert(test.size() == 0); + static_assert(test.empty()); + static_assert(!test.contains(Foo::One)); + static_assert(!test.contains(Foo::Two)); + } + { constexpr EnumSet test{ Foo::One }; + static_assert(test.size() == 1); static_assert(!test.empty()); static_assert(test.contains(Foo::One)); static_assert(!test.contains(Foo::Two)); @@ -49,6 +59,8 @@ namespace lms::core constexpr EnumSet test{ Foo::One, Foo::Two }; constexpr auto bitfield{ test.getBitfield() }; + static_assert(test.size() == 2); + EnumSet test2; EXPECT_FALSE(test2.contains(Foo::One)); EXPECT_FALSE(test2.contains(Foo::Two));