[Bf-blender-cvs] [e60516bdee4] functions: cleanup
Jacques Lucke
noreply at git.blender.org
Wed Dec 11 14:26:47 CET 2019
Commit: e60516bdee46646162e2a797c1c2d54ea53e964e
Author: Jacques Lucke
Date: Wed Dec 11 14:03:13 2019 +0100
Branches: functions
https://developer.blender.org/rBe60516bdee46646162e2a797c1c2d54ea53e964e
cleanup
===================================================================
M source/blender/functions/intern/multi_functions/mixed.cc
M source/blender/functions/intern/multi_functions/mixed.h
===================================================================
diff --git a/source/blender/functions/intern/multi_functions/mixed.cc b/source/blender/functions/intern/multi_functions/mixed.cc
index b3c68789457..c465eb7af43 100644
--- a/source/blender/functions/intern/multi_functions/mixed.cc
+++ b/source/blender/functions/intern/multi_functions/mixed.cc
@@ -37,43 +37,40 @@ using BLI::rgba_f;
using BLI::TemporaryArray;
using BLI::TemporaryVector;
-MF_AddFloats::MF_AddFloats()
+template<typename T, typename FuncT, typename EqualFuncT = std::equal_to<T>>
+void group_indices_by_same_value(ArrayRef<uint> indices,
+ VirtualListRef<T> values,
+ const FuncT &func,
+ EqualFuncT equal = std::equal_to<T>())
{
- MFSignatureBuilder signature("Add Floats");
- signature.single_input<float>("A");
- signature.single_input<float>("B");
- signature.single_output<float>("Result");
- this->set_signature(signature);
-}
+ if (indices.size() == 0) {
+ return;
+ }
+ if (values.is_single_element()) {
+ const T &value = values[indices[0]];
+ func(value, indices);
+ return;
+ }
-void MF_AddFloats::call(MFMask mask, MFParams params, MFContext UNUSED(context)) const
-{
- auto a = params.readonly_single_input<float>(0, "A");
- auto b = params.readonly_single_input<float>(1, "B");
- auto result = params.uninitialized_single_output<float>(2, "Result");
+ Vector<T> seen_values;
- for (uint i : mask.indices()) {
- result[i] = a[i] + b[i];
- }
-}
+ for (uint i : indices.index_iterator()) {
+ uint index = indices[i];
-MF_AddFloat3s::MF_AddFloat3s()
-{
- MFSignatureBuilder signature("Add Float3s");
- signature.single_input<float3>("A");
- signature.single_input<float3>("B");
- signature.single_output<float3>("Result");
- this->set_signature(signature);
-}
+ const T &value = values[index];
+ if (seen_values.as_ref().any([&](const T &seen_value) { return equal(value, seen_value); })) {
+ continue;
+ }
+ seen_values.append(value);
-void MF_AddFloat3s::call(MFMask mask, MFParams params, MFContext UNUSED(context)) const
-{
- auto a = params.readonly_single_input<float3>(0, "A");
- auto b = params.readonly_single_input<float3>(1, "B");
- auto result = params.uninitialized_single_output<float3>(2, "Result");
+ TemporaryVector<uint> indices_with_value;
+ for (uint j : indices.drop_front(i)) {
+ if (equal(values[j], value)) {
+ indices_with_value.append(j);
+ }
+ }
- for (uint i : mask.indices()) {
- result[i] = a[i] + b[i];
+ func(value, indices_with_value.as_ref());
}
}
@@ -176,26 +173,6 @@ void MF_SeparateVector::call(MFMask mask, MFParams params, MFContext UNUSED(cont
}
}
-MF_VectorDistance::MF_VectorDistance()
-{
- MFSignatureBuilder signature("Vector Distance");
- signature.single_input<float3>("A");
- signature.single_input<float3>("A");
- signature.single_output<float>("Distances");
- this->set_signature(signature);
-}
-
-void MF_VectorDistance::call(MFMask mask, MFParams params, MFContext UNUSED(context)) const
-{
- auto a = params.readonly_single_input<float3>(0, "A");
- auto b = params.readonly_single_input<float3>(1, "B");
- auto distances = params.uninitialized_single_output<float>(2, "Distances");
-
- for (uint i : mask.indices()) {
- distances[i] = float3::distance(a[i], b[i]);
- }
-}
-
MF_FloatArraySum::MF_FloatArraySum()
{
MFSignatureBuilder signature("Float Array Sum");
@@ -480,43 +457,6 @@ MF_GetImageColorOnSurface::MF_GetImageColorOnSurface()
this->set_signature(signature);
}
-template<typename T, typename FuncT, typename EqualFuncT = std::equal_to<T>>
-void group_indices_by_same_value(ArrayRef<uint> indices,
- VirtualListRef<T> values,
- const FuncT &func,
- EqualFuncT equal = std::equal_to<T>())
-{
- if (indices.size() == 0) {
- return;
- }
- if (values.is_single_element()) {
- const T &value = values[indices[0]];
- func(value, indices);
- return;
- }
-
- Vector<T> seen_values;
-
- for (uint i : indices.index_iterator()) {
- uint index = indices[i];
-
- const T &value = values[index];
- if (seen_values.as_ref().any([&](const T &seen_value) { return equal(value, seen_value); })) {
- continue;
- }
- seen_values.append(value);
-
- TemporaryVector<uint> indices_with_value;
- for (uint j : indices.drop_front(i)) {
- if (equal(values[j], value)) {
- indices_with_value.append(j);
- }
- }
-
- func(value, indices_with_value.as_ref());
- }
-}
-
static void get_colors_on_surface(ArrayRef<uint> indices,
VirtualListRef<SurfaceHook> surface_hooks,
MutableArrayRef<rgba_f> r_colors,
diff --git a/source/blender/functions/intern/multi_functions/mixed.h b/source/blender/functions/intern/multi_functions/mixed.h
index c280c5b9a70..00ac0ede096 100644
--- a/source/blender/functions/intern/multi_functions/mixed.h
+++ b/source/blender/functions/intern/multi_functions/mixed.h
@@ -8,23 +8,6 @@
namespace FN {
-class MF_Dummy final : public MultiFunction {
- void call(MFMask UNUSED(mask), MFParams UNUSED(params), MFContext UNUSED(context)) const override
- {
- }
-};
-class MF_AddFloats final : public MultiFunction {
- public:
- MF_AddFloats();
- void call(MFMask mask, MFParams params, MFContext context) const override;
-};
-
-class MF_AddFloat3s final : public MultiFunction {
- public:
- MF_AddFloat3s();
- void call(MFMask mask, MFParams params, MFContext context) const override;
-};
-
class MF_CombineColor final : public MultiFunction {
public:
MF_CombineColor();
@@ -49,12 +32,6 @@ class MF_SeparateVector final : public MultiFunction {
void call(MFMask mask, MFParams params, MFContext context) const override;
};
-class MF_VectorDistance final : public MultiFunction {
- public:
- MF_VectorDistance();
- void call(MFMask mask, MFParams params, MFContext context) const override;
-};
-
class MF_FloatArraySum final : public MultiFunction {
public:
MF_FloatArraySum();
More information about the Bf-blender-cvs
mailing list