[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