Functions: Expose set_all method for generic virtual arrays
This is very similar to rB5613c61275fe6 and rB0061150e4c90d, basically just exposing a `VMutableArray` method to its generic counterpart. This is quite important for curve point attributes to avoid a lookup for every point when there are multiple splines.
This commit is contained in:
@@ -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()));
|
||||
|
||||
Reference in New Issue
Block a user