diff options
Diffstat (limited to 'source/blender/functions/FN_generic_virtual_array.hh')
-rw-r--r-- | source/blender/functions/FN_generic_virtual_array.hh | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/source/blender/functions/FN_generic_virtual_array.hh b/source/blender/functions/FN_generic_virtual_array.hh index 12454fe08f3..31f649e0358 100644 --- a/source/blender/functions/FN_generic_virtual_array.hh +++ b/source/blender/functions/FN_generic_virtual_array.hh @@ -220,11 +220,19 @@ class GVMutableArray : public GVArray { void fill(const void *value); + /* Copy the values from the source buffer to all elements in the virtual array. */ + void set_all(const void *src) + { + this->set_all_impl(src); + } + protected: virtual void set_by_copy_impl(const int64_t index, const void *value); virtual void set_by_relocate_impl(const int64_t index, void *value); virtual void set_by_move_impl(const int64_t index, void *value) = 0; + virtual void set_all_impl(const void *src); + virtual void *try_get_internal_mutable_varray_impl(); }; @@ -554,6 +562,11 @@ template<typename T> class GVMutableArray_For_VMutableArray : public GVMutableAr varray_->set(index, std::move(value_)); } + void set_all_impl(const void *src) + { + varray_->set_all(Span((T *)data, size_)); + } + void materialize_impl(const IndexMask mask, void *dst) const override { varray_->materialize(mask, MutableSpan((T *)dst, mask.min_array_size())); |