Quellcode durchsuchen

meta: added meta_any::owner

Michele Caini vor 4 Jahren
Ursprung
Commit
113893dcea
2 geänderte Dateien mit 15 neuen und 0 gelöschten Zeilen
  1. 8 0
      src/entt/meta/meta.hpp
  2. 7 0
      test/entt/meta/meta_any.cpp

+ 8 - 0
src/entt/meta/meta.hpp

@@ -583,6 +583,14 @@ public:
         return meta_any{*this, storage.as_ref()};
         return meta_any{*this, storage.as_ref()};
     }
     }
 
 
+    /**
+     * @brief Returns true if a wrapper owns its object, false otherwise.
+     * @return True if the wrapper owns its object, false otherwise.
+     */
+    [[nodiscard]] bool owner() const ENTT_NOEXCEPT {
+        return storage.owner();
+    }
+
 private:
 private:
     any storage;
     any storage;
     internal::meta_type_node *node;
     internal::meta_type_node *node;

+ 7 - 0
test/entt/meta/meta_any.cpp

@@ -106,6 +106,7 @@ TEST_F(MetaAny, SBO) {
     entt::meta_any any{'c'};
     entt::meta_any any{'c'};
 
 
     ASSERT_TRUE(any);
     ASSERT_TRUE(any);
+    ASSERT_TRUE(any.owner());
     ASSERT_FALSE(any.try_cast<std::size_t>());
     ASSERT_FALSE(any.try_cast<std::size_t>());
     ASSERT_EQ(any.cast<char>(), 'c');
     ASSERT_EQ(any.cast<char>(), 'c');
     ASSERT_NE(any.data(), nullptr);
     ASSERT_NE(any.data(), nullptr);
@@ -118,6 +119,7 @@ TEST_F(MetaAny, NoSBO) {
     entt::meta_any any{instance};
     entt::meta_any any{instance};
 
 
     ASSERT_TRUE(any);
     ASSERT_TRUE(any);
+    ASSERT_TRUE(any.owner());
     ASSERT_FALSE(any.try_cast<std::size_t>());
     ASSERT_FALSE(any.try_cast<std::size_t>());
     ASSERT_EQ(any.cast<fat_t>(), instance);
     ASSERT_EQ(any.cast<fat_t>(), instance);
     ASSERT_NE(any.data(), nullptr);
     ASSERT_NE(any.data(), nullptr);
@@ -162,6 +164,7 @@ TEST_F(MetaAny, SBOAsRefConstruction) {
     auto any = entt::forward_as_meta(value);
     auto any = entt::forward_as_meta(value);
 
 
     ASSERT_TRUE(any);
     ASSERT_TRUE(any);
+    ASSERT_FALSE(any.owner());
     ASSERT_EQ(any.type(), entt::resolve<int>());
     ASSERT_EQ(any.type(), entt::resolve<int>());
 
 
     ASSERT_FALSE(any.try_cast<std::size_t>());
     ASSERT_FALSE(any.try_cast<std::size_t>());
@@ -197,6 +200,7 @@ TEST_F(MetaAny, SBOAsConstRefConstruction) {
     auto any = entt::forward_as_meta(value);
     auto any = entt::forward_as_meta(value);
 
 
     ASSERT_TRUE(any);
     ASSERT_TRUE(any);
+    ASSERT_FALSE(any.owner());
     ASSERT_EQ(any.type(), entt::resolve<int>());
     ASSERT_EQ(any.type(), entt::resolve<int>());
 
 
     ASSERT_FALSE(any.try_cast<std::size_t>());
     ASSERT_FALSE(any.try_cast<std::size_t>());
@@ -421,6 +425,7 @@ TEST_F(MetaAny, NoSBOAsRefConstruction) {
     auto any = entt::forward_as_meta(instance);
     auto any = entt::forward_as_meta(instance);
 
 
     ASSERT_TRUE(any);
     ASSERT_TRUE(any);
+    ASSERT_FALSE(any.owner());
     ASSERT_EQ(any.type(), entt::resolve<fat_t>());
     ASSERT_EQ(any.type(), entt::resolve<fat_t>());
 
 
     ASSERT_FALSE(any.try_cast<std::size_t>());
     ASSERT_FALSE(any.try_cast<std::size_t>());
@@ -454,6 +459,7 @@ TEST_F(MetaAny, NoSBOAsConstRefConstruction) {
     auto any = entt::forward_as_meta(instance);
     auto any = entt::forward_as_meta(instance);
 
 
     ASSERT_TRUE(any);
     ASSERT_TRUE(any);
+    ASSERT_FALSE(any.owner());
     ASSERT_EQ(any.type(), entt::resolve<fat_t>());
     ASSERT_EQ(any.type(), entt::resolve<fat_t>());
 
 
     ASSERT_FALSE(any.try_cast<std::size_t>());
     ASSERT_FALSE(any.try_cast<std::size_t>());
@@ -683,6 +689,7 @@ TEST_F(MetaAny, VoidInPlaceTypeConstruction) {
     entt::meta_any any{std::in_place_type<void>};
     entt::meta_any any{std::in_place_type<void>};
 
 
     ASSERT_TRUE(any);
     ASSERT_TRUE(any);
+    ASSERT_TRUE(any.owner());
     ASSERT_FALSE(any.try_cast<char>());
     ASSERT_FALSE(any.try_cast<char>());
     ASSERT_EQ(any.data(), nullptr);
     ASSERT_EQ(any.data(), nullptr);
     ASSERT_EQ(any.type(), entt::resolve<void>());
     ASSERT_EQ(any.type(), entt::resolve<void>());