[Bf-blender-cvs] [7df5a34580d] virtual-array-attributes: add GVArrayForEmbeddedVArray

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


Commit: 7df5a34580d1d5e096b1c0282b523ba76b1238ea
Author: Jacques Lucke
Date:   Sat Apr 10 16:13:36 2021 +0200
Branches: virtual-array-attributes
https://developer.blender.org/rB7df5a34580d1d5e096b1c0282b523ba76b1238ea

add GVArrayForEmbeddedVArray

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

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 d2262e41dee..4ebe9e5799a 100644
--- a/source/blender/functions/FN_generic_virtual_array.hh
+++ b/source/blender/functions/FN_generic_virtual_array.hh
@@ -349,4 +349,47 @@ template<typename T> class VArrayForGVArray : public VArray<T> {
   }
 };
 
+template<typename T, typename VArrayT> class GVArrayForEmbeddedVArray : public GVArray {
+ private:
+  VArrayT varray_;
+
+ public:
+  template<typename... Args>
+  GVArrayForEmbeddedVArray(const int64_t size, Args &&... args)
+      : GVArray(CPPType::get<T>(), size), varray_(std::forward<Args>(args)...)
+  {
+  }
+
+ protected:
+  void get_impl(const int64_t index, void *r_value) const override
+  {
+    *(T *)r_value = varray_.get(index);
+  }
+
+  void get_to_uninitialized_impl(const int64_t index, void *r_value) const override
+  {
+    new (r_value) T(varray_.get(index));
+  }
+
+  bool is_span_impl() const override
+  {
+    return varray_.is_span();
+  }
+
+  GSpan get_span_impl() const override
+  {
+    return GSpan(varray_.get_span());
+  }
+
+  bool is_single_impl() const override
+  {
+    return varray_.is_single();
+  }
+
+  void get_single_impl(void *r_value) const override
+  {
+    *(T *)r_value = varray_.get_single();
+  }
+};
+
 }  // namespace blender::fn



More information about the Bf-blender-cvs mailing list