[Bf-blender-cvs] [99921148e26] virtual-array-attributes: add optional ownership

Jacques Lucke noreply at git.blender.org
Mon Apr 12 18:27:53 CEST 2021


Commit: 99921148e269fa43925563b13c1436ebd7e6d008
Author: Jacques Lucke
Date:   Sat Apr 10 16:37:28 2021 +0200
Branches: virtual-array-attributes
https://developer.blender.org/rB99921148e269fa43925563b13c1436ebd7e6d008

add optional ownership

===================================================================

M	source/blender/functions/FN_generic_virtual_array.hh

===================================================================

diff --git a/source/blender/functions/FN_generic_virtual_array.hh b/source/blender/functions/FN_generic_virtual_array.hh
index bc63801de11..b958ad6fc2b 100644
--- a/source/blender/functions/FN_generic_virtual_array.hh
+++ b/source/blender/functions/FN_generic_virtual_array.hh
@@ -268,43 +268,51 @@ class GVArrayForSingleValueRef : public GVArray {
 
 template<typename T> class GVArrayForVArray : public GVArray {
  private:
-  const VArray<T> &array_;
+  const VArray<T> &varray_;
+  std::unique_ptr<VArray<T>> owned_varray_;
 
  public:
-  GVArrayForVArray(const VArray<T> &array)
-      : GVArray(CPPType::get<T>(), array.size()), array_(array)
+  GVArrayForVArray(const VArray<T> &varray)
+      : GVArray(CPPType::get<T>(), varray.size()), varray_(varray)
+  {
+  }
+
+  GVArrayForVArray(std::unique_ptr<VArray<T>> varray)
+      : GVArray(CPPType::get<T>(), varray->size()),
+        varray_(*varray),
+        owned_varray_(std::move(varray))
   {
   }
 
  protected:
   void get_impl(const int64_t index, void *r_value) const override
   {
-    *(T *)r_value = array_.get(index);
+    *(T *)r_value = varray_.get(index);
   }
 
   void get_to_uninitialized_impl(const int64_t index, void *r_value) const override
   {
-    new (r_value) T(array_.get(index));
+    new (r_value) T(varray_.get(index));
   }
 
   bool is_span_impl() const override
   {
-    return array_.is_span();
+    return varray_.is_span();
   }
 
   GSpan get_span_impl() const override
   {
-    return GSpan(array_.get_span());
+    return GSpan(varray_.get_span());
   }
 
   bool is_single_impl() const override
   {
-    return array_.is_single();
+    return varray_.is_single();
   }
 
   void get_single_impl(void *r_value) const override
   {
-    *(T *)r_value = array_.get_single();
+    *(T *)r_value = varray_.get_single();
   }
 };



More information about the Bf-blender-cvs mailing list