meta: make meta_associative_container::erase return the number of elements removed
This commit is contained in:
@@ -131,10 +131,9 @@ struct basic_meta_associative_container_traits {
|
||||
}
|
||||
}
|
||||
|
||||
[[nodiscard]] static bool erase(any &container, meta_any &key) {
|
||||
[[nodiscard]] static size_type erase(any &container, meta_any &key) {
|
||||
auto *const cont = any_cast<Type>(&container);
|
||||
return cont && key.allow_cast<const typename Type::key_type &>()
|
||||
&& (cont->erase(key.cast<const typename Type::key_type &>()) != cont->size());
|
||||
return cont && key.allow_cast<const typename Type::key_type &>() ? cont->erase(key.cast<const typename Type::key_type &>()) : size_type{};
|
||||
}
|
||||
|
||||
[[nodiscard]] static iterator find(any &container, meta_any &key) {
|
||||
|
||||
@@ -119,7 +119,7 @@ public:
|
||||
[[nodiscard]] inline iterator begin();
|
||||
[[nodiscard]] inline iterator end();
|
||||
inline bool insert(meta_any, meta_any);
|
||||
inline bool erase(meta_any);
|
||||
inline size_type erase(meta_any);
|
||||
[[nodiscard]] inline iterator find(meta_any);
|
||||
[[nodiscard]] inline explicit operator bool() const noexcept;
|
||||
|
||||
@@ -132,7 +132,7 @@ private:
|
||||
bool (*clear_fn)(any &) = nullptr;
|
||||
iterator (*iter_fn)(any &, const bool) = nullptr;
|
||||
bool (*insert_fn)(any &, meta_any &, meta_any &) = nullptr;
|
||||
bool (*erase_fn)(any &, meta_any &) = nullptr;
|
||||
size_type (*erase_fn)(any &, meta_any &) = nullptr;
|
||||
iterator (*find_fn)(any &, meta_any &) = nullptr;
|
||||
any storage{};
|
||||
};
|
||||
@@ -1764,7 +1764,7 @@ inline bool meta_associative_container::insert(meta_any key, meta_any value = {}
|
||||
* @param key The key of the element to remove.
|
||||
* @return A bool denoting whether the removal took place.
|
||||
*/
|
||||
inline bool meta_associative_container::erase(meta_any key) {
|
||||
inline meta_associative_container::size_type meta_associative_container::erase(meta_any key) {
|
||||
return erase_fn(storage, key);
|
||||
}
|
||||
|
||||
|
||||
@@ -230,11 +230,11 @@ TEST_F(MetaContainer, StdMap) {
|
||||
ASSERT_EQ(view.find(0)->second.cast<char>(), 'a');
|
||||
ASSERT_EQ(view.find(1.)->second.cast<char>(), 'b');
|
||||
|
||||
ASSERT_FALSE(view.erase(invalid_type{}));
|
||||
ASSERT_EQ(view.erase(invalid_type{}), 0u);
|
||||
ASSERT_FALSE(view.find(invalid_type{}));
|
||||
ASSERT_EQ(view.size(), 5u);
|
||||
|
||||
ASSERT_TRUE(view.erase(0));
|
||||
ASSERT_EQ(view.erase(0), 1u);
|
||||
ASSERT_EQ(view.size(), 4u);
|
||||
ASSERT_EQ(view.find(0), view.end());
|
||||
|
||||
@@ -242,7 +242,7 @@ TEST_F(MetaContainer, StdMap) {
|
||||
|
||||
ASSERT_EQ(view.find(1.f)->second.cast<char>(), 'f');
|
||||
|
||||
ASSERT_TRUE(view.erase(1.));
|
||||
ASSERT_EQ(view.erase(1.), 1u);
|
||||
ASSERT_TRUE(view.clear());
|
||||
ASSERT_EQ(view.size(), 0u);
|
||||
}
|
||||
@@ -272,11 +272,11 @@ TEST_F(MetaContainer, StdSet) {
|
||||
ASSERT_EQ(view.find(0)->first.cast<int>(), 0);
|
||||
ASSERT_EQ(view.find(1.)->first.cast<int>(), 1);
|
||||
|
||||
ASSERT_FALSE(view.erase(invalid_type{}));
|
||||
ASSERT_EQ(view.erase(invalid_type{}), 0u);
|
||||
ASSERT_FALSE(view.find(invalid_type{}));
|
||||
ASSERT_EQ(view.size(), 5u);
|
||||
|
||||
ASSERT_TRUE(view.erase(0));
|
||||
ASSERT_EQ(view.erase(0), 1u);
|
||||
ASSERT_EQ(view.size(), 4u);
|
||||
ASSERT_EQ(view.find(0), view.end());
|
||||
|
||||
@@ -284,7 +284,7 @@ TEST_F(MetaContainer, StdSet) {
|
||||
ASSERT_NE(view.find(1.)->first.try_cast<const int>(), nullptr);
|
||||
ASSERT_EQ(view.find(true)->first.cast<const int &>(), 1);
|
||||
|
||||
ASSERT_TRUE(view.erase(1.));
|
||||
ASSERT_EQ(view.erase(1.), 1u);
|
||||
ASSERT_TRUE(view.clear());
|
||||
ASSERT_EQ(view.size(), 0u);
|
||||
}
|
||||
@@ -319,11 +319,11 @@ TEST_F(MetaContainer, DenseMap) {
|
||||
ASSERT_EQ(view.find(0)->second.cast<char>(), 'a');
|
||||
ASSERT_EQ(view.find(1.)->second.cast<char>(), 'b');
|
||||
|
||||
ASSERT_FALSE(view.erase(invalid_type{}));
|
||||
ASSERT_EQ(view.erase(invalid_type{}), 0u);
|
||||
ASSERT_FALSE(view.find(invalid_type{}));
|
||||
ASSERT_EQ(view.size(), 5u);
|
||||
|
||||
ASSERT_TRUE(view.erase(0));
|
||||
ASSERT_EQ(view.erase(0), 1u);
|
||||
ASSERT_EQ(view.size(), 4u);
|
||||
ASSERT_EQ(view.find(0), view.end());
|
||||
|
||||
@@ -331,7 +331,7 @@ TEST_F(MetaContainer, DenseMap) {
|
||||
|
||||
ASSERT_EQ(view.find(1.f)->second.cast<char>(), 'f');
|
||||
|
||||
ASSERT_TRUE(view.erase(1.));
|
||||
ASSERT_EQ(view.erase(1.), 1u);
|
||||
ASSERT_TRUE(view.clear());
|
||||
ASSERT_EQ(view.size(), 0u);
|
||||
}
|
||||
@@ -365,11 +365,11 @@ TEST_F(MetaContainer, DenseSet) {
|
||||
ASSERT_EQ(view.find(0)->first.cast<int>(), 0);
|
||||
ASSERT_EQ(view.find(1.)->first.cast<int>(), 1);
|
||||
|
||||
ASSERT_FALSE(view.erase(invalid_type{}));
|
||||
ASSERT_EQ(view.erase(invalid_type{}), 0u);
|
||||
ASSERT_FALSE(view.find(invalid_type{}));
|
||||
ASSERT_EQ(view.size(), 5u);
|
||||
|
||||
ASSERT_TRUE(view.erase(0));
|
||||
ASSERT_EQ(view.erase(0), 1u);
|
||||
ASSERT_EQ(view.size(), 4u);
|
||||
ASSERT_EQ(view.find(0), view.end());
|
||||
|
||||
@@ -377,7 +377,7 @@ TEST_F(MetaContainer, DenseSet) {
|
||||
ASSERT_NE(view.find(1.)->first.try_cast<const int>(), nullptr);
|
||||
ASSERT_EQ(view.find(true)->first.cast<const int &>(), 1);
|
||||
|
||||
ASSERT_TRUE(view.erase(1.));
|
||||
ASSERT_EQ(view.erase(1.), 1u);
|
||||
ASSERT_TRUE(view.clear());
|
||||
ASSERT_EQ(view.size(), 0u);
|
||||
}
|
||||
@@ -454,7 +454,7 @@ TEST_F(MetaContainer, ConstKeyValueAssociativeContainer) {
|
||||
ASSERT_EQ(view.find(0), view.end());
|
||||
ASSERT_EQ(view.find(2)->second.cast<char>(), 'c');
|
||||
|
||||
ASSERT_FALSE(view.erase(2));
|
||||
ASSERT_EQ(view.erase(2), 0u);
|
||||
ASSERT_EQ(view.size(), 1u);
|
||||
ASSERT_NE(view.find(2), view.end());
|
||||
|
||||
@@ -500,7 +500,7 @@ TEST_F(MetaContainer, ConstKeyOnlyAssociativeContainer) {
|
||||
ASSERT_EQ(view.find(0), view.end());
|
||||
ASSERT_EQ(view.find(2)->first.cast<int>(), 2);
|
||||
|
||||
ASSERT_FALSE(view.erase(2));
|
||||
ASSERT_EQ(view.erase(2), 0u);
|
||||
ASSERT_EQ(view.size(), 1u);
|
||||
ASSERT_NE(view.find(2), view.end());
|
||||
|
||||
|
||||
Reference in New Issue
Block a user