[Bf-blender-cvs] [e09e429f57c] functions-experimental-refactor: cleanup MultiFunction API

Jacques Lucke noreply at git.blender.org
Thu Oct 31 14:13:00 CET 2019


Commit: e09e429f57c55fcaf1826e7021c6be4f1764efbd
Author: Jacques Lucke
Date:   Thu Oct 31 13:43:44 2019 +0100
Branches: functions-experimental-refactor
https://developer.blender.org/rBe09e429f57c55fcaf1826e7021c6be4f1764efbd

cleanup MultiFunction API

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

M	source/blender/blenkernel/BKE_multi_function.h
M	source/blender/blenkernel/intern/multi_function_network.cc
M	source/blender/blenkernel/intern/multi_functions.cc
M	source/blender/modifiers/intern/MOD_functiondeform_cxx.cc

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

diff --git a/source/blender/blenkernel/BKE_multi_function.h b/source/blender/blenkernel/BKE_multi_function.h
index bfaffc3a7e3..fd07e74a44b 100644
--- a/source/blender/blenkernel/BKE_multi_function.h
+++ b/source/blender/blenkernel/BKE_multi_function.h
@@ -192,6 +192,8 @@ class MFSignature {
   Vector<uint> m_params_with_external_dependencies;
   Vector<uint> m_corrected_indices;
 
+  friend class MultiFunction;
+
  public:
   MFSignature() = default;
 
@@ -566,6 +568,21 @@ class MultiFunction {
     return m_signature;
   }
 
+  IndexRange param_indices() const
+  {
+    return IndexRange(m_signature.m_param_types.size());
+  }
+
+  MFParamType param_type(uint index) const
+  {
+    return m_signature.m_param_types[index];
+  }
+
+  StringRefNull param_name(uint index) const
+  {
+    return m_signature.m_param_names[index];
+  }
+
  protected:
   void set_signature(MFSignatureBuilder &signature_builder)
   {
diff --git a/source/blender/blenkernel/intern/multi_function_network.cc b/source/blender/blenkernel/intern/multi_function_network.cc
index b511bd3743b..769b906826d 100644
--- a/source/blender/blenkernel/intern/multi_function_network.cc
+++ b/source/blender/blenkernel/intern/multi_function_network.cc
@@ -34,8 +34,9 @@ MFBuilderFunctionNode &MFNetworkBuilder::add_function(const MultiFunction &funct
 #ifdef DEBUG
   BLI_assert(!input_param_indices.has_duplicates__linear_search());
   BLI_assert(!output_param_indices.has_duplicates__linear_search());
-  for (uint i = 0; i < function.signature().param_types().size(); i++) {
-    BLI_assert(input_param_indices.contains(i) || output_param_indices.contains(i));
+  for (uint param_index : function.param_indices()) {
+    BLI_assert(input_param_indices.contains(param_index) ||
+               output_param_indices.contains(param_index));
   }
 #endif
 
@@ -50,7 +51,7 @@ MFBuilderFunctionNode &MFNetworkBuilder::add_function(const MultiFunction &funct
 
   for (uint i = 0; i < input_param_indices.size(); i++) {
     uint param_index = input_param_indices[i];
-    MFParamType param = function.signature().param_types()[param_index];
+    MFParamType param = function.param_type(param_index);
     BLI_assert(param.is_input_or_mutable());
 
     auto input_socket = new MFBuilderInputSocket();
@@ -66,7 +67,7 @@ MFBuilderFunctionNode &MFNetworkBuilder::add_function(const MultiFunction &funct
 
   for (uint i = 0; i < output_param_indices.size(); i++) {
     uint param_index = output_param_indices[i];
-    MFParamType param = function.signature().param_types()[param_index];
+    MFParamType param = function.param_type(param_index);
     BLI_assert(param.is_output_or_mutable());
 
     auto output_socket = new MFBuilderOutputSocket();
diff --git a/source/blender/blenkernel/intern/multi_functions.cc b/source/blender/blenkernel/intern/multi_functions.cc
index 5e96600f3d0..6dbb2c64825 100644
--- a/source/blender/blenkernel/intern/multi_functions.cc
+++ b/source/blender/blenkernel/intern/multi_functions.cc
@@ -318,12 +318,11 @@ MultiFunction_SimpleVectorize::MultiFunction_SimpleVectorize(const MultiFunction
   BLI_assert(input_is_vectorized.contains(true));
 
   MFSignatureBuilder signature;
-  ArrayRef<MFParamType> param_types = function.signature().param_types();
 
   bool found_output_param = false;
   UNUSED_VARS_NDEBUG(found_output_param);
-  for (uint param_index = 0; param_index < param_types.size(); param_index++) {
-    MFParamType param_type = param_types[param_index];
+  for (uint param_index : function.param_indices()) {
+    MFParamType param_type = function.param_type(param_index);
     switch (param_type.category()) {
       case MFParamType::None:
       case MFParamType::ReadonlyVectorInput:
@@ -381,15 +380,13 @@ void MultiFunction_SimpleVectorize::call(ArrayRef<uint> mask_indices,
     output_vector_arrays.append(vector_array);
   }
 
-  ArrayRef<MFParamType> param_types = m_function.signature().param_types();
-
   for (uint index : mask_indices) {
     uint length = vectorization_lengths[index];
     MFParamsBuilder params_builder;
     params_builder.start_new(m_function.signature(), length);
 
-    for (uint param_index = 0; param_index < param_types.size(); param_index++) {
-      MFParamType param_type = param_types[param_index];
+    for (uint param_index : m_function.param_indices()) {
+      MFParamType param_type = m_function.param_type(param_index);
       switch (param_type.category()) {
         case MFParamType::None:
         case MFParamType::ReadonlyVectorInput:
diff --git a/source/blender/modifiers/intern/MOD_functiondeform_cxx.cc b/source/blender/modifiers/intern/MOD_functiondeform_cxx.cc
index 7880af6cc4f..1e620c8c998 100644
--- a/source/blender/modifiers/intern/MOD_functiondeform_cxx.cc
+++ b/source/blender/modifiers/intern/MOD_functiondeform_cxx.cc
@@ -928,8 +928,7 @@ class MultiFunction_FunctionTree : public BKE::MultiFunction {
             if (target_node.is_function()) {
               const MFFunctionNode &target_function_node = target_node.as_function();
               uint param_index = target_function_node.input_param_indices()[target->index()];
-              MFParamType param_type =
-                  target_function_node.function().signature().param_types()[param_index];
+              MFParamType param_type = target_function_node.function().param_type(param_index);
 
               if (param_type.is_readonly_vector_input()) {
                 storage.set_virtual_list_list_for_input__non_owning(*target, input_list_list);
@@ -1018,10 +1017,8 @@ class MultiFunction_FunctionTree : public BKE::MultiFunction {
     Vector<std::pair<const MFOutputSocket *, GenericMutableArrayRef>> single_outputs_to_forward;
     Vector<std::pair<const MFOutputSocket *, GenericVectorArray *>> vector_outputs_to_forward;
 
-    ArrayRef<MFParamType> param_types = function_node.function().signature().param_types();
-
-    for (uint param_index = 0; param_index < param_types.size(); param_index++) {
-      MFParamType param_type = param_types[param_index];
+    for (uint param_index : function_node.function().param_indices()) {
+      MFParamType param_type = function_node.function().param_type(param_index);
       switch (param_type.category()) {
         case MFParamType::None: {
           BLI_assert(false);
@@ -1098,8 +1095,7 @@ class MultiFunction_FunctionTree : public BKE::MultiFunction {
         if (target_node.is_function()) {
           const MFFunctionNode &target_function_node = target_node.as_function();
           uint param_index = target_function_node.input_param_indices()[target->index()];
-          MFParamType param_type =
-              target_function_node.function().signature().param_types()[param_index];
+          MFParamType param_type = target_function_node.function().param_type(param_index);
 
           if (param_type.is_readonly_vector_input()) {
             storage.set_virtual_list_list_for_input__non_owning(*target, *values);



More information about the Bf-blender-cvs mailing list