[Bf-blender-cvs] [418d364836c] virtual-array-attributes: add optional ownership

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


Commit: 418d364836c2797993fa6b0e3cc4d8f48b9930a7
Author: Jacques Lucke
Date:   Sat Apr 10 16:16:18 2021 +0200
Branches: virtual-array-attributes
https://developer.blender.org/rB418d364836c2797993fa6b0e3cc4d8f48b9930a7

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 4ebe9e5799a..bc63801de11 100644
--- a/source/blender/functions/FN_generic_virtual_array.hh
+++ b/source/blender/functions/FN_generic_virtual_array.hh
@@ -310,41 +310,47 @@ template<typename T> class GVArrayForVArray : public GVArray {
 
 template<typename T> class VArrayForGVArray : public VArray<T> {
  private:
-  const GVArray &array_;
+  const GVArray &varray_;
+  std::unique_ptr<GVArray> owned_varray_;
 
  public:
-  VArrayForGVArray(const GVArray &array) : VArray<T>(array.size()), array_(array)
+  VArrayForGVArray(const GVArray &varray) : VArray<T>(varray.size()), varray_(varray)
+  {
+    BLI_assert(varray_.type().template is<T>());
+  }
+
+  VArrayForGVArray(std::unique_ptr<GVArray> varray)
+      : VArray<T>(varray->size()), varray_(*varray), owned_varray_(std::move(varray))
   {
-    BLI_assert(array_.type().template is<T>());
   }
 
  protected:
   T get_impl(const int64_t index) const override
   {
     T value;
-    array_.get(index, &value);
+    varray_.get(index, &value);
     return value;
   }
 
   bool is_span_impl() const override
   {
-    return array_.is_span();
+    return varray_.is_span();
   }
 
   Span<T> get_span_impl() const override
   {
-    return array_.get_span().template typed<T>();
+    return varray_.get_span().template typed<T>();
   }
 
   bool is_single_impl() const override
   {
-    return array_.is_single();
+    return varray_.is_single();
   }
 
   T get_single_impl() const override
   {
     T value;
-    array_.get_single(&value);
+    varray_.get_single(&value);
     return value;
   }
 };



More information about the Bf-blender-cvs mailing list