[Bf-blender-cvs] [45883793e5b] virtual-array-attributes: add VMutableArrayForGVMutableArray
Jacques Lucke
noreply at git.blender.org
Mon Apr 12 18:27:53 CEST 2021
Commit: 45883793e5bcc066e48ad849f0d076a5fc59f4b9
Author: Jacques Lucke
Date: Sat Apr 10 16:46:40 2021 +0200
Branches: virtual-array-attributes
https://developer.blender.org/rB45883793e5bcc066e48ad849f0d076a5fc59f4b9
add VMutableArrayForGVMutableArray
===================================================================
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 b958ad6fc2b..dd76fa2d5d0 100644
--- a/source/blender/functions/FN_generic_virtual_array.hh
+++ b/source/blender/functions/FN_generic_virtual_array.hh
@@ -363,6 +363,59 @@ template<typename T> class VArrayForGVArray : public VArray<T> {
}
};
+template<typename T> class VMutableArrayForGVMutableArray : public VMutableArray<T> {
+ private:
+ GVMutableArray &varray_;
+ std::unique_ptr<GVMutableArray> owned_varray_;
+
+ public:
+ VMutableArrayForGVMutableArray(GVMutableArray &varray)
+ : VMutableArray<T>(varray.size()), varray_(varray)
+ {
+ BLI_assert(varray_.type().template is<T>());
+ }
+
+ VMutableArrayForGVMutableArray(std::unique_ptr<GVMutableArray> varray)
+ : VMutableArray<T>(varray->size()), varray_(*varray), owned_varray_(std::move(varray))
+ {
+ }
+
+ private:
+ T get_impl(const int64_t index) const override
+ {
+ T value;
+ varray_.get(index, &value);
+ return value;
+ }
+
+ void set_impl(const int64_t index, T value) const override
+ {
+ varray_.set_by_relocate(index, &value);
+ }
+
+ bool is_span_impl() const override
+ {
+ return varray_.is_span();
+ }
+
+ Span<T> get_span_impl() const override
+ {
+ return varray_.get_span().template typed<T>();
+ }
+
+ bool is_single_impl() const override
+ {
+ return varray_.is_single();
+ }
+
+ T get_single_impl() const override
+ {
+ T value;
+ varray_.get_single(&value);
+ return value;
+ }
+};
+
template<typename T, typename VArrayT> class GVArrayForEmbeddedVArray : public GVArray {
private:
VArrayT varray_;
More information about the Bf-blender-cvs
mailing list