[Bf-blender-cvs] [3a1aec54a7d] functions: cleanup

Jacques Lucke noreply at git.blender.org
Wed Dec 11 15:28:14 CET 2019


Commit: 3a1aec54a7d41d2569d65d9fe8baf825696a3095
Author: Jacques Lucke
Date:   Wed Dec 11 15:20:21 2019 +0100
Branches: functions
https://developer.blender.org/rB3a1aec54a7d41d2569d65d9fe8baf825696a3095

cleanup

===================================================================

M	source/blender/functions/FN_generic_virtual_list_list_ref.h
M	source/blender/functions/intern/multi_functions/vectorize.cc

===================================================================

diff --git a/source/blender/functions/FN_generic_virtual_list_list_ref.h b/source/blender/functions/FN_generic_virtual_list_list_ref.h
index 358b40ed780..a5dd0433bf4 100644
--- a/source/blender/functions/FN_generic_virtual_list_list_ref.h
+++ b/source/blender/functions/FN_generic_virtual_list_list_ref.h
@@ -76,6 +76,19 @@ class GenericVirtualListListRef {
     return m_virtual_list_size;
   }
 
+  uint sublist_size(uint index) const
+  {
+    BLI_assert(index < m_virtual_list_size);
+    switch (m_category) {
+      case Category::SingleArray:
+        return m_data.single_array.real_array_size;
+      case Category::FullArrayList:
+        return m_data.full_array_list.real_array_sizes[index];
+    }
+    BLI_assert(false);
+    return 0;
+  }
+
   const CPPType &type() const
   {
     return *m_type;
diff --git a/source/blender/functions/intern/multi_functions/vectorize.cc b/source/blender/functions/intern/multi_functions/vectorize.cc
index 1a8f107b47e..9aba5a0f66a 100644
--- a/source/blender/functions/intern/multi_functions/vectorize.cc
+++ b/source/blender/functions/intern/multi_functions/vectorize.cc
@@ -1,7 +1,11 @@
 #include "vectorize.h"
 
+#include "BLI_array_cxx.h"
+
 namespace FN {
 
+using BLI::Array;
+
 MF_SimpleVectorize::MF_SimpleVectorize(const MultiFunction &function,
                                        ArrayRef<bool> input_is_vectorized)
     : m_function(function), m_input_is_vectorized(input_is_vectorized)
@@ -48,32 +52,33 @@ MF_SimpleVectorize::MF_SimpleVectorize(const MultiFunction &function,
   this->set_signature(signature);
 }
 
-void MF_SimpleVectorize::call(MFMask mask, MFParams params, MFContext context) const
+static void get_vectorization_lengths(MFMask mask,
+                                      MFParams params,
+                                      ArrayRef<uint> vectorized_param_indices,
+                                      MutableArrayRef<int> r_lengths)
 {
-  if (mask.indices_amount() == 0) {
-    return;
-  }
-  uint array_size = mask.min_array_size();
-
-  Vector<int> vectorization_lengths(array_size);
-  vectorization_lengths.fill_indices(mask.indices(), -1);
+  r_lengths.fill_indices(mask.indices(), -1);
 
-  for (uint param_index : m_vectorized_inputs) {
+  for (uint param_index : vectorized_param_indices) {
     GenericVirtualListListRef values = params.readonly_vector_input(param_index);
     for (uint i : mask.indices()) {
-      if (vectorization_lengths[i] != 0) {
-        vectorization_lengths[i] = std::max<int>(vectorization_lengths[i], values[i].size());
+      if (r_lengths[i] != 0) {
+        uint sublist_size = values.sublist_size(i);
+        r_lengths[i] = std::max<int>(r_lengths[i], sublist_size);
       }
     }
   }
+}
 
-  Vector<GenericVectorArray *> output_vector_arrays;
-  for (uint param_index : m_output_indices) {
-    GenericVectorArray *vector_array = &params.vector_output(param_index,
-                                                             this->param_name(param_index));
-    output_vector_arrays.append(vector_array);
+void MF_SimpleVectorize::call(MFMask mask, MFParams params, MFContext context) const
+{
+  if (mask.indices_amount() == 0) {
+    return;
   }
 
+  Array<int> vectorization_lengths(mask.min_array_size());
+  get_vectorization_lengths(mask, params, m_vectorized_inputs, vectorization_lengths);
+
   for (uint index : mask.indices()) {
     uint length = vectorization_lengths[index];
     MFParamsBuilder params_builder(m_function, length);



More information about the Bf-blender-cvs mailing list