[Bf-blender-cvs] [c0b7b16167d] virtual-array-attributes: add GVMutableArrayForVMutableArray
Jacques Lucke
noreply at git.blender.org
Mon Apr 12 18:27:53 CEST 2021
Commit: c0b7b16167d68447a89642cdef1afe68618af57a
Author: Jacques Lucke
Date: Sat Apr 10 17:11:40 2021 +0200
Branches: virtual-array-attributes
https://developer.blender.org/rBc0b7b16167d68447a89642cdef1afe68618af57a
add GVMutableArrayForVMutableArray
===================================================================
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 298b7a72c0b..b88e0b8f892 100644
--- a/source/blender/functions/FN_generic_virtual_array.hh
+++ b/source/blender/functions/FN_generic_virtual_array.hh
@@ -423,6 +423,73 @@ template<typename T> class VMutableArrayForGVMutableArray : public VMutableArray
}
};
+template<typename T> class GVMutableArrayForVMutableArray : public GVMutableArray {
+ private:
+ VMutableArray<T> *varray_ = nullptr;
+
+ public:
+ GVMutableArrayForVMutableArray(VMutableArray<T> &varray)
+ : GVMutableArray(CPPType::get<T>(), varray.size()), varray_(&varray)
+ {
+ }
+
+ private:
+ void set_varray(const VArray<T> &varray)
+ {
+ BLI_assert(varray.size() == size_);
+ varray_ = &varray;
+ }
+
+ 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();
+ }
+
+ void set_by_copy_impl(const int64_t index, const void *value) override
+ {
+ const T &value_ = *(const T *)value;
+ varray_->set(index, value_);
+ }
+
+ void set_by_relocate_impl(const int64_t index, void *value) override
+ {
+ T &value_ = *(T *)value;
+ varray_->set(index, std::move(value));
+ value_.~T();
+ }
+
+ void set_by_move_impl(const int64_t index, void *value) override
+ {
+ T &value_ = *(T *)value;
+ this->set(index, std::move(value));
+ }
+};
+
template<typename T> class GVArrayForOwnedVArray : public GVArrayForVArray<T> {
private:
std::unique_ptr<VArray<T>> owned_varray_;
More information about the Bf-blender-cvs
mailing list