enum_set: Introduce full()

This commit is contained in:
Tomasz Grabiec
2019-04-26 12:14:17 +02:00
parent 1d9b88dceb
commit f33f0d759d
2 changed files with 15 additions and 0 deletions

View File

@@ -172,6 +172,14 @@ public:
return enum_set(mask);
}
static constexpr mask_type full_mask() {
return ~(std::numeric_limits<mask_type>::max() << (Enum::max_sequence + 1));
}
static constexpr enum_set full() {
return enum_set(full_mask());
}
static inline mask_type mask_for(enum_type e) {
return mask_type(1) << Enum::sequence_for(e);
}

View File

@@ -79,6 +79,13 @@ BOOST_AUTO_TEST_CASE(set_contains) {
BOOST_REQUIRE(!fs.contains(fruit::pear));
}
BOOST_AUTO_TEST_CASE(full_set) {
const auto fs = fruit_set::full();
BOOST_REQUIRE(fs.contains(fruit::apple));
BOOST_REQUIRE(fs.contains(fruit::pear));
BOOST_REQUIRE(fs.contains(fruit::banana));
}
BOOST_AUTO_TEST_CASE(set_from_mask) {
const auto fs = fruit_set::of<fruit::apple, fruit::banana>();
BOOST_REQUIRE_EQUAL(fs.mask(), fruit_set::from_mask(fs.mask()).mask());