enum_set: add toggle()

This commit is contained in:
Botond Dénes
2021-09-13 10:28:50 +03:00
parent 1fd701e709
commit 96c95119f9
2 changed files with 66 additions and 0 deletions

View File

@@ -239,6 +239,15 @@ public:
_mask |= mask_for(e);
}
template<enum_type e>
void toggle() {
_mask ^= mask_for<e>();
}
void toggle(enum_type e) {
_mask ^= mask_for(e);
}
void add(const enum_set& other) {
_mask |= other._mask;
}

View File

@@ -150,3 +150,60 @@ BOOST_AUTO_TEST_CASE(set_add) {
fs0.add(fruit_set::of<fruit::apple>());
BOOST_REQUIRE(!fs0.contains(fruit::pear) && fs0.contains(fruit::apple) && !fs0.contains(fruit::banana));
}
BOOST_AUTO_TEST_CASE(set_toggle) {
auto fs = fruit_set();
fs.set<fruit::pear>();
BOOST_REQUIRE(!fs.contains<fruit::apple>());
BOOST_REQUIRE(fs.contains<fruit::pear>());
BOOST_REQUIRE(!fs.contains<fruit::banana>());
fs.toggle<fruit::pear>();
BOOST_REQUIRE(!fs.contains<fruit::apple>());
BOOST_REQUIRE(!fs.contains<fruit::pear>());
BOOST_REQUIRE(!fs.contains<fruit::banana>());
fs.toggle<fruit::pear>();
BOOST_REQUIRE(!fs.contains<fruit::apple>());
BOOST_REQUIRE(fs.contains<fruit::pear>());
BOOST_REQUIRE(!fs.contains<fruit::banana>());
fs.toggle(fruit::pear);
BOOST_REQUIRE(!fs.contains<fruit::apple>());
BOOST_REQUIRE(!fs.contains<fruit::pear>());
BOOST_REQUIRE(!fs.contains<fruit::banana>());
fs.toggle(fruit::pear);
BOOST_REQUIRE(!fs.contains<fruit::apple>());
BOOST_REQUIRE(fs.contains<fruit::pear>());
BOOST_REQUIRE(!fs.contains<fruit::banana>());
fs.toggle<fruit::banana>();
BOOST_REQUIRE(!fs.contains<fruit::apple>());
BOOST_REQUIRE(fs.contains<fruit::pear>());
BOOST_REQUIRE(fs.contains<fruit::banana>());
fs.toggle<fruit::apple>();
BOOST_REQUIRE(fs.contains<fruit::apple>());
BOOST_REQUIRE(fs.contains<fruit::pear>());
BOOST_REQUIRE(fs.contains<fruit::banana>());
fs.toggle(fruit::banana);
BOOST_REQUIRE(fs.contains<fruit::apple>());
BOOST_REQUIRE(fs.contains<fruit::pear>());
BOOST_REQUIRE(!fs.contains<fruit::banana>());
fs.toggle(fruit::apple);
BOOST_REQUIRE(!fs.contains<fruit::apple>());
BOOST_REQUIRE(fs.contains<fruit::pear>());
BOOST_REQUIRE(!fs.contains<fruit::banana>());
}