From 5dd25aed4dfc73cc29e4530dbe592bf42872fb8a Mon Sep 17 00:00:00 2001 From: Michele Caini Date: Fri, 26 Jun 2020 14:57:33 +0200 Subject: [PATCH] meta: assoc container's ::erase/::find accept also convertible keys --- src/entt/meta/meta.hpp | 10 ++++++---- test/entt/meta/meta_container.cpp | 6 ++++-- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/entt/meta/meta.hpp b/src/entt/meta/meta.hpp index ad566bde6..a4ef8e452 100644 --- a/src/entt/meta/meta.hpp +++ b/src/entt/meta/meta.hpp @@ -1817,20 +1817,22 @@ struct meta_associative_container::meta_associative_container_proxy { } [[nodiscard]] static bool erase(void *container, meta_any key) { + using k_type = typename meta_associative_container_traits::key_type; bool ret = false; - if(const auto *k_ptr = key.try_cast::key_type>(); k_ptr) { - ret = meta_associative_container_traits::erase(*static_cast(container), *k_ptr); + if(const auto *k_ptr = key.try_cast::key_type>(); k_ptr || key.convert()) { + ret = meta_associative_container_traits::erase(*static_cast(container), k_ptr ? *k_ptr : key.cast()); } return ret; } [[nodiscard]] static iterator find(void *container, meta_any key) { + using k_type = typename meta_associative_container_traits::key_type; iterator ret{}; - if(const auto *k_ptr = key.try_cast::key_type>(); k_ptr) { - ret = iterator{std::in_place_type, meta_associative_container_traits::find(*static_cast(container), *k_ptr)}; + if(const auto *k_ptr = key.try_cast::key_type>(); k_ptr || key.convert()) { + ret = iterator{std::in_place_type, meta_associative_container_traits::find(*static_cast(container), k_ptr ? *k_ptr : key.cast())}; } return ret; diff --git a/test/entt/meta/meta_container.cpp b/test/entt/meta/meta_container.cpp index b6b800638..8a6f88925 100644 --- a/test/entt/meta/meta_container.cpp +++ b/test/entt/meta/meta_container.cpp @@ -184,7 +184,7 @@ TEST_F(MetaContainer, StdMap) { ASSERT_EQ(view.size(), 5u); ASSERT_EQ((*view.find(0)).second.cast(), 'a'); - ASSERT_EQ((*view.find(1)).second.cast(), 'b'); + ASSERT_EQ((*view.find(1.)).second.cast(), 'b'); ASSERT_TRUE(view.erase(0)); ASSERT_EQ(view.size(), 4u); @@ -194,6 +194,7 @@ TEST_F(MetaContainer, StdMap) { ASSERT_EQ((*view.find(1)).second.cast(), 'f'); + ASSERT_TRUE(view.erase(1.)); ASSERT_TRUE(view.clear()); ASSERT_EQ(view.size(), 0u); } @@ -236,7 +237,7 @@ TEST_F(MetaContainer, StdSet) { ASSERT_EQ(view.size(), 5u); ASSERT_EQ((*view.find(0)).first.cast(), 0); - ASSERT_EQ((*view.find(1)).first.cast(), 1); + ASSERT_EQ((*view.find(1.)).first.cast(), 1); ASSERT_TRUE(view.erase(0)); ASSERT_EQ(view.size(), 4u); @@ -246,6 +247,7 @@ TEST_F(MetaContainer, StdSet) { ASSERT_EQ((*view.find(1)).first.cast(), 1); + ASSERT_TRUE(view.erase(1.)); ASSERT_TRUE(view.clear()); ASSERT_EQ(view.size(), 0u); }