diff options
author | Jacques Lucke <jacques@blender.org> | 2021-08-20 13:42:11 +0300 |
---|---|---|
committer | Jacques Lucke <jacques@blender.org> | 2021-08-20 13:42:11 +0300 |
commit | ea3ee04fa8ba4613007bfbed2206b9af9d3aaddd (patch) | |
tree | abea155262cb8711dba00b09953087c9e6a1cd79 /source/blender/functions | |
parent | 48384363875dead78d63db69e8e82f91f3cb1361 (diff) | |
parent | 7d8c71e8003ecb4d3a7fe2483a328d3f2d184faa (diff) |
Merge branch 'master' into temp-geometry-nodes-fields-prototype
Diffstat (limited to 'source/blender/functions')
-rw-r--r-- | source/blender/functions/FN_generic_vector_array.hh | 2 | ||||
-rw-r--r-- | source/blender/functions/FN_multi_function_params.hh | 11 | ||||
-rw-r--r-- | source/blender/functions/intern/generic_vector_array.cc | 9 |
3 files changed, 22 insertions, 0 deletions
diff --git a/source/blender/functions/FN_generic_vector_array.hh b/source/blender/functions/FN_generic_vector_array.hh index eeba0c9dba2..179e85671f8 100644 --- a/source/blender/functions/FN_generic_vector_array.hh +++ b/source/blender/functions/FN_generic_vector_array.hh @@ -82,6 +82,8 @@ class GVectorArray : NonCopyable, NonMovable { void extend(IndexMask mask, const GVVectorArray &values); void extend(IndexMask mask, const GVectorArray &values); + void clear(IndexMask mask); + GMutableSpan operator[](int64_t index); GSpan operator[](int64_t index) const; diff --git a/source/blender/functions/FN_multi_function_params.hh b/source/blender/functions/FN_multi_function_params.hh index e292d11def7..a480287d578 100644 --- a/source/blender/functions/FN_multi_function_params.hh +++ b/source/blender/functions/FN_multi_function_params.hh @@ -54,6 +54,11 @@ class MFParamsBuilder { MFParamsBuilder(const class MultiFunction &fn, int64_t min_array_size); + template<typename T> void add_readonly_single_input_value(T value, StringRef expected_name = "") + { + T *value_ptr = &scope_.add_value<T>(std::move(value), __func__); + this->add_readonly_single_input(value_ptr, expected_name); + } template<typename T> void add_readonly_single_input(const T *value, StringRef expected_name = "") { this->add_readonly_single_input(scope_.construct<GVArray_For_SingleValueRef>( @@ -83,6 +88,12 @@ class MFParamsBuilder { this->add_readonly_vector_input( scope_.construct<GVVectorArray_For_GVectorArray>(__func__, vector_array), expected_name); } + void add_readonly_vector_input(const GSpan single_vector, StringRef expected_name = "") + { + this->add_readonly_vector_input( + scope_.construct<GVVectorArray_For_SingleGSpan>(__func__, single_vector, min_array_size_), + expected_name); + } void add_readonly_vector_input(const GVVectorArray &ref, StringRef expected_name = "") { this->assert_current_param_type(MFParamType::ForVectorInput(ref.type()), expected_name); diff --git a/source/blender/functions/intern/generic_vector_array.cc b/source/blender/functions/intern/generic_vector_array.cc index 9556d24218e..ec95a283919 100644 --- a/source/blender/functions/intern/generic_vector_array.cc +++ b/source/blender/functions/intern/generic_vector_array.cc @@ -78,6 +78,15 @@ void GVectorArray::extend(IndexMask mask, const GVectorArray &values) this->extend(mask, virtual_values); } +void GVectorArray::clear(IndexMask mask) +{ + for (const int64_t i : mask) { + Item &item = items_[i]; + type_.destruct_n(item.start, item.length); + item.length = 0; + } +} + GMutableSpan GVectorArray::operator[](const int64_t index) { Item &item = items_[index]; |