From 5e8a9340f130f33c062cd56e6eaf755edfca2221 Mon Sep 17 00:00:00 2001 From: Michele Caini Date: Wed, 23 Oct 2019 23:29:25 +0200 Subject: [PATCH] meta: added meta_type::remove_extent (close #345) --- src/entt/meta/meta.hpp | 13 +++++++++++++ test/entt/meta/meta.cpp | 6 ++++++ 2 files changed, 19 insertions(+) diff --git a/src/entt/meta/meta.hpp b/src/entt/meta/meta.hpp index 724f73b2d..184c69313 100644 --- a/src/entt/meta/meta.hpp +++ b/src/entt/meta/meta.hpp @@ -120,6 +120,7 @@ struct meta_type_node { const size_type extent; bool(* const compare)(const void *, const void *); meta_type_node *(* const remove_pointer)() ENTT_NOEXCEPT; + meta_type_node *(* const remove_extent)() ENTT_NOEXCEPT; meta_base_node *base{nullptr}; meta_conv_node *conv{nullptr}; meta_ctor_node *ctor{nullptr}; @@ -261,6 +262,9 @@ struct meta_node { &compare, // workaround for an issue with VS2017 []() ENTT_NOEXCEPT -> meta_type_node * { return meta_node>>::resolve(); + }, + []() ENTT_NOEXCEPT -> meta_type_node * { + return meta_node>>::resolve(); } }; @@ -1487,6 +1491,15 @@ public: return node->remove_pointer(); } + /** + * @brief Provides the meta type for which the array is defined. + * @return The meta type for which the array is defined or this meta type + * if it doesn't refer to an array type. + */ + meta_type remove_extent() const ENTT_NOEXCEPT { + return node->remove_extent(); + } + /** * @brief Iterates all the meta base of a meta type. * diff --git a/test/entt/meta/meta.cpp b/test/entt/meta/meta.cpp index 163009a91..aaff1d237 100644 --- a/test/entt/meta/meta.cpp +++ b/test/entt/meta/meta.cpp @@ -1732,6 +1732,12 @@ TEST_F(Meta, MetaTypeRemovePointer) { ASSERT_EQ(entt::resolve().remove_pointer(), entt::resolve()); } +TEST_F(Meta, MetaTypeRemoveExtent) { + ASSERT_EQ(entt::resolve().remove_extent(), entt::resolve()); + ASSERT_EQ(entt::resolve().remove_extent(), entt::resolve()); + ASSERT_EQ(entt::resolve().remove_extent(), entt::resolve()); +} + TEST_F(Meta, MetaTypeBase) { auto type = entt::resolve(); bool iterate = false;