[Bf-blender-cvs] [f84f8b2a02b] functions-experimental-refactor: combine lists
Jacques Lucke
noreply at git.blender.org
Tue Oct 15 15:56:58 CEST 2019
Commit: f84f8b2a02bb74683a8a400ab2adc4abadf24181
Author: Jacques Lucke
Date: Thu Oct 10 21:40:05 2019 +0200
Branches: functions-experimental-refactor
https://developer.blender.org/rBf84f8b2a02bb74683a8a400ab2adc4abadf24181
combine lists
===================================================================
M source/blender/blenkernel/BKE_generic_vector_array.h
M source/blender/blenkernel/intern/node_functions.cc
===================================================================
diff --git a/source/blender/blenkernel/BKE_generic_vector_array.h b/source/blender/blenkernel/BKE_generic_vector_array.h
index 297936dc5d4..1b8d754711a 100644
--- a/source/blender/blenkernel/BKE_generic_vector_array.h
+++ b/source/blender/blenkernel/BKE_generic_vector_array.h
@@ -61,23 +61,10 @@ class GenericVectorArray : BLI::NonCopyable, BLI::NonMovable {
slice.length++;
}
- void append_all__copy(const GenericArrayRef &array)
+ void extend_single__copy(uint index, GenericArrayRef values)
{
- BLI_assert(m_array_size == array.size());
-
- for (BufferSlice &slice : this->slices()) {
- if (slice.length == slice.capacity) {
- this->grow_single(slice, slice.length + 1);
- }
- }
-
- const void *src_buffer = array.buffer();
- for (BufferSlice &slice : this->slices()) {
- void *dst = POINTER_OFFSET(slice.start, m_element_size * slice.length);
- m_type.copy_to_uninitialized(src_buffer, dst);
- slice.length++;
-
- src_buffer = POINTER_OFFSET(src_buffer, m_element_size);
+ for (uint i = 0; i < values.size(); i++) {
+ this->append_single__copy(index, values[i]);
}
}
diff --git a/source/blender/blenkernel/intern/node_functions.cc b/source/blender/blenkernel/intern/node_functions.cc
index a74f30e58e5..db45da833fc 100644
--- a/source/blender/blenkernel/intern/node_functions.cc
+++ b/source/blender/blenkernel/intern/node_functions.cc
@@ -50,6 +50,7 @@ class MultiFunction {
template<typename T>
GenericVectorArray::MutableTypedRef<T> vector_output(uint index, StringRef name);
GenericVectorArray &vector_output(uint index, StringRef name);
+
GenericVectorArray &mutable_vector(uint index, StringRef name);
};
@@ -57,7 +58,7 @@ class MultiFunction {
virtual void call(ArrayRef<uint> mask_indices, Params ¶ms) const = 0;
};
-class MultiFunction_AddFloats : public MultiFunction {
+class MultiFunction_AddFloats final : public MultiFunction {
void signature(Signature &signature) const override
{
signature.readonly_single_input<float>("A");
@@ -77,7 +78,7 @@ class MultiFunction_AddFloats : public MultiFunction {
}
};
-class MultiFunction_VectorDistance : public MultiFunction {
+class MultiFunction_VectorDistance final : public MultiFunction {
void signature(Signature &signature) const override
{
signature.readonly_single_input<float3>("A");
@@ -97,7 +98,7 @@ class MultiFunction_VectorDistance : public MultiFunction {
}
};
-class MultiFunction_FloatArraySum : public MultiFunction {
+class MultiFunction_FloatArraySum final : public MultiFunction {
void signature(Signature &signature) const override
{
signature.readonly_vector_input<float>("Array");
@@ -119,7 +120,7 @@ class MultiFunction_FloatArraySum : public MultiFunction {
}
};
-class MultiFunction_FloatRange : public MultiFunction {
+class MultiFunction_FloatRange final : public MultiFunction {
void signature(Signature &signature) const override
{
signature.readonly_single_input<float>("Start");
@@ -144,7 +145,7 @@ class MultiFunction_FloatRange : public MultiFunction {
}
};
-class MultiFunction_AppendToList : public MultiFunction {
+class MultiFunction_AppendToList final : public MultiFunction {
private:
CPPType &m_base_type;
@@ -166,7 +167,7 @@ class MultiFunction_AppendToList : public MultiFunction {
}
};
-class MultiFunction_GetListElement : public MultiFunction {
+class MultiFunction_GetListElement final : public MultiFunction {
private:
CPPType &m_base_type;
@@ -201,7 +202,7 @@ class MultiFunction_GetListElement : public MultiFunction {
}
};
-class MultiFunction_ListLength : public MultiFunction {
+class MultiFunction_ListLength final : public MultiFunction {
private:
CPPType &m_base_type;
@@ -223,4 +224,26 @@ class MultiFunction_ListLength : public MultiFunction {
}
};
+class MultiFunction_CombineLists final : public MultiFunction {
+ private:
+ CPPType &m_base_type;
+
+ public:
+ void signature(Signature &signature) const override
+ {
+ signature.mutable_vector("List", m_base_type);
+ signature.readonly_vector_input("Other", m_base_type);
+ }
+
+ void call(ArrayRef<uint> mask_indices, Params ¶ms) const override
+ {
+ GenericVectorArray &lists = params.mutable_vector(0, "List");
+ GenericVectorArrayOrSingleRef others = params.readonly_vector_input(1, "Other");
+
+ for (uint i : mask_indices) {
+ lists.extend_single__copy(i, others[i]);
+ }
+ }
+};
+
} // namespace BKE
\ No newline at end of file
More information about the Bf-blender-cvs
mailing list