[Bf-blender-cvs] [577442a26fd] master: Functions: build multi-function signature in-place

Jacques Lucke noreply at git.blender.org
Sat Jan 7 16:31:06 CET 2023


Commit: 577442a26fd3c5c17ddb04326e8da22e28bfca80
Author: Jacques Lucke
Date:   Sat Jan 7 16:30:56 2023 +0100
Branches: master
https://developer.blender.org/rB577442a26fd3c5c17ddb04326e8da22e28bfca80

Functions: build multi-function signature in-place

This avoids a move of the signature after building it. Tthe value had
to be moved out of `MFSignatureBuilder` in the `build` method.

This also makes the naming a bit less confusing where sometimes
both the `MFSignature` and `MFSignatureBuilder` were referred
to as "signature".

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

M	source/blender/functions/FN_multi_function_builder.hh
M	source/blender/functions/FN_multi_function_signature.hh
M	source/blender/functions/intern/multi_function_builder.cc
M	source/blender/functions/intern/multi_function_procedure_executor.cc
M	source/blender/functions/tests/FN_field_test.cc
M	source/blender/functions/tests/FN_multi_function_test.cc
M	source/blender/functions/tests/FN_multi_function_test_common.hh
M	source/blender/nodes/function/nodes/node_fn_align_euler_to_vector.cc
M	source/blender/nodes/function/nodes/node_fn_input_special_characters.cc
M	source/blender/nodes/function/nodes/node_fn_separate_color.cc
M	source/blender/nodes/geometry/nodes/node_geo_curve_sample.cc
M	source/blender/nodes/geometry/nodes/node_geo_image_texture.cc
M	source/blender/nodes/geometry/nodes/node_geo_proximity.cc
M	source/blender/nodes/geometry/nodes/node_geo_raycast.cc
M	source/blender/nodes/geometry/nodes/node_geo_sample_index.cc
M	source/blender/nodes/geometry/nodes/node_geo_sample_nearest.cc
M	source/blender/nodes/geometry/nodes/node_geo_sample_nearest_surface.cc
M	source/blender/nodes/geometry/nodes/node_geo_sample_uv_surface.cc
M	source/blender/nodes/shader/nodes/node_shader_color_ramp.cc
M	source/blender/nodes/shader/nodes/node_shader_curves.cc
M	source/blender/nodes/shader/nodes/node_shader_mix.cc
M	source/blender/nodes/shader/nodes/node_shader_mix_rgb.cc
M	source/blender/nodes/shader/nodes/node_shader_sepcomb_rgb.cc
M	source/blender/nodes/shader/nodes/node_shader_sepcomb_xyz.cc
M	source/blender/nodes/shader/nodes/node_shader_tex_brick.cc
M	source/blender/nodes/shader/nodes/node_shader_tex_checker.cc
M	source/blender/nodes/shader/nodes/node_shader_tex_gradient.cc
M	source/blender/nodes/shader/nodes/node_shader_tex_magic.cc
M	source/blender/nodes/shader/nodes/node_shader_tex_musgrave.cc
M	source/blender/nodes/shader/nodes/node_shader_tex_noise.cc
M	source/blender/nodes/shader/nodes/node_shader_tex_voronoi.cc
M	source/blender/nodes/shader/nodes/node_shader_tex_wave.cc
M	source/blender/nodes/shader/nodes/node_shader_tex_white_noise.cc

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

diff --git a/source/blender/functions/FN_multi_function_builder.hh b/source/blender/functions/FN_multi_function_builder.hh
index 3a491a63e6c..f9f0890f4fb 100644
--- a/source/blender/functions/FN_multi_function_builder.hh
+++ b/source/blender/functions/FN_multi_function_builder.hh
@@ -445,10 +445,9 @@ template<typename CallFn, typename... ParamTags> class CustomMF : public MultiFu
   CustomMF(const char *name, CallFn call_fn, TypeSequence<ParamTags...> /*param_tags*/)
       : call_fn_(std::move(call_fn))
   {
-    MFSignatureBuilder signature{name};
+    MFSignatureBuilder builder{name, signature_};
     /* Loop over all parameter types and add an entry for each in the signature. */
-    ([&] { signature.add(ParamTags(), ""); }(), ...);
-    signature_ = signature.build();
+    ([&] { builder.add(ParamTags(), ""); }(), ...);
     this->set_signature(&signature_);
   }
 
@@ -631,9 +630,8 @@ template<typename T> class CustomMF_Constant : public MultiFunction {
  public:
   template<typename U> CustomMF_Constant(U &&value) : value_(std::forward<U>(value))
   {
-    MFSignatureBuilder signature{"Constant"};
-    signature.single_output<T>("Value");
-    signature_ = signature.build();
+    MFSignatureBuilder builder{"Constant", signature_};
+    builder.single_output<T>("Value");
     this->set_signature(&signature_);
   }
 
diff --git a/source/blender/functions/FN_multi_function_signature.hh b/source/blender/functions/FN_multi_function_signature.hh
index 1c2d645c1fd..44f2b84867d 100644
--- a/source/blender/functions/FN_multi_function_signature.hh
+++ b/source/blender/functions/FN_multi_function_signature.hh
@@ -32,19 +32,15 @@ struct MFSignature {
 
 class MFSignatureBuilder {
  private:
-  MFSignature signature_;
+  MFSignature &signature_;
 
  public:
-  MFSignatureBuilder(const char *function_name)
+  MFSignatureBuilder(const char *function_name, MFSignature &signature_to_build)
+      : signature_(signature_to_build)
   {
     signature_.function_name = function_name;
   }
 
-  MFSignature build() const
-  {
-    return std::move(signature_);
-  }
-
   /* Input Parameter Types */
 
   template<typename T> void single_input(const char *name)
diff --git a/source/blender/functions/intern/multi_function_builder.cc b/source/blender/functions/intern/multi_function_builder.cc
index 32a41f99c48..bda5ec19cea 100644
--- a/source/blender/functions/intern/multi_function_builder.cc
+++ b/source/blender/functions/intern/multi_function_builder.cc
@@ -18,9 +18,8 @@ CustomMF_GenericConstant::CustomMF_GenericConstant(const CPPType &type,
   }
   value_ = value;
 
-  MFSignatureBuilder signature{"Constant"};
-  signature.single_output("Value", type);
-  signature_ = signature.build();
+  MFSignatureBuilder builder{"Constant", signature_};
+  builder.single_output("Value", type);
   this->set_signature(&signature_);
 }
 
@@ -58,9 +57,8 @@ bool CustomMF_GenericConstant::equals(const MultiFunction &other) const
 CustomMF_GenericConstantArray::CustomMF_GenericConstantArray(GSpan array) : array_(array)
 {
   const CPPType &type = array.type();
-  MFSignatureBuilder signature{"Constant Vector"};
-  signature.vector_output("Value", type);
-  signature_ = signature.build();
+  MFSignatureBuilder builder{"Constant Vector", signature_};
+  builder.vector_output("Value", type);
   this->set_signature(&signature_);
 }
 
@@ -78,14 +76,13 @@ CustomMF_DefaultOutput::CustomMF_DefaultOutput(Span<MFDataType> input_types,
                                                Span<MFDataType> output_types)
     : output_amount_(output_types.size())
 {
-  MFSignatureBuilder signature{"Default Output"};
+  MFSignatureBuilder builder{"Default Output", signature_};
   for (MFDataType data_type : input_types) {
-    signature.input("Input", data_type);
+    builder.input("Input", data_type);
   }
   for (MFDataType data_type : output_types) {
-    signature.output("Output", data_type);
+    builder.output("Output", data_type);
   }
-  signature_ = signature.build();
   this->set_signature(&signature_);
 }
 void CustomMF_DefaultOutput::call(IndexMask mask, MFParams params, MFContext /*context*/) const
@@ -106,10 +103,9 @@ void CustomMF_DefaultOutput::call(IndexMask mask, MFParams params, MFContext /*c
 
 CustomMF_GenericCopy::CustomMF_GenericCopy(MFDataType data_type)
 {
-  MFSignatureBuilder signature{"Copy"};
-  signature.input("Input", data_type);
-  signature.output("Output", data_type);
-  signature_ = signature.build();
+  MFSignatureBuilder builder{"Copy", signature_};
+  builder.input("Input", data_type);
+  builder.output("Output", data_type);
   this->set_signature(&signature_);
 }
 
diff --git a/source/blender/functions/intern/multi_function_procedure_executor.cc b/source/blender/functions/intern/multi_function_procedure_executor.cc
index 4fe3c27ea27..6c997e2e222 100644
--- a/source/blender/functions/intern/multi_function_procedure_executor.cc
+++ b/source/blender/functions/intern/multi_function_procedure_executor.cc
@@ -8,13 +8,12 @@ namespace blender::fn {
 
 MFProcedureExecutor::MFProcedureExecutor(const MFProcedure &procedure) : procedure_(procedure)
 {
-  MFSignatureBuilder signature("Procedure Executor");
+  MFSignatureBuilder builder("Procedure Executor", signature_);
 
   for (const ConstMFParameter &param : procedure.params()) {
-    signature.add("Parameter", MFParamType(param.type, param.variable->data_type()));
+    builder.add("Parameter", MFParamType(param.type, param.variable->data_type()));
   }
 
-  signature_ = signature.build();
   this->set_signature(&signature_);
 }
 
diff --git a/source/blender/functions/tests/FN_field_test.cc b/source/blender/functions/tests/FN_field_test.cc
index 3e5c201195f..5e3ae5676fc 100644
--- a/source/blender/functions/tests/FN_field_test.cc
+++ b/source/blender/functions/tests/FN_field_test.cc
@@ -156,12 +156,11 @@ class TwoOutputFunction : public MultiFunction {
  public:
   TwoOutputFunction()
   {
-    MFSignatureBuilder signature{"Two Outputs"};
-    signature.single_input<int>("In1");
-    signature.single_input<int>("In2");
-    signature.single_output<int>("Add");
-    signature.single_output<int>("Add10");
-    signature_ = signature.build();
+    MFSignatureBuilder builder{"Two Outputs", signature_};
+    builder.single_input<int>("In1");
+    builder.single_input<int>("In2");
+    builder.single_output<int>("Add");
+    builder.single_output<int>("Add10");
     this->set_signature(&signature_);
   }
 
diff --git a/source/blender/functions/tests/FN_multi_function_test.cc b/source/blender/functions/tests/FN_multi_function_test.cc
index 7a582805e98..5306fe0b20c 100644
--- a/source/blender/functions/tests/FN_multi_function_test.cc
+++ b/source/blender/functions/tests/FN_multi_function_test.cc
@@ -19,11 +19,12 @@ class AddFunction : public MultiFunction {
 
   static MFSignature create_signature()
   {
-    MFSignatureBuilder signature("Add");
-    signature.single_input<int>("A");
-    signature.single_input<int>("B");
-    signature.single_output<int>("Result");
-    return signature.build();
+    MFSignature signature;
+    MFSignatureBuilder builder("Add", signature);
+    builder.single_input<int>("A");
+    builder.single_input<int>("B");
+    builder.single_output<int>("Result");
+    return signature;
   }
 
   void call(IndexMask mask, MFParams params, MFContext /*context*/) const override
diff --git a/source/blender/functions/tests/FN_multi_function_test_common.hh b/source/blender/functions/tests/FN_multi_function_test_common.hh
index 15e8baf2001..82433723760 100644
--- a/source/blender/functions/tests/FN_multi_function_test_common.hh
+++ b/source/blender/functions/tests/FN_multi_function_test_common.hh
@@ -14,10 +14,11 @@ class AddPrefixFunction : public MultiFunction {
 
   static MFSignature create_signature()
   {
-    MFSignatureBuilder signature{"Add Prefix"};
-    signature.single_input<std::string>("Prefix");
-    signature.single_mutable<std::string>("Strings");
-    return signature.build();
+    MFSignature signature;
+    MFSignatureBuilder builder{"Add Prefix", signature};
+    builder.single_input<std::string>("Prefix");
+    builder.single_mutable<std::string>("Strings");
+    return signature;
   }
 
   void call(IndexMask mask, MFParams params, MFContext /*context*/) const override
@@ -41,10 +42,11 @@ class CreateRangeFunction : public MultiFunction {
 
   static MFSignature create_signature()
   {
-    MFSignatureBuilder signature{"Create Range"};
-    signature.single_input<int>("Size");
-    signature.vector_output<int>("Range");
-    return signature.build();
+    MFSignature signature;
+    MFSignatureBuilder builder{"Create Range", signature};
+    builder.single_input<int>("Size");
+    builder.vector_output<int>("Range");
+    return signature;
   }
 
   void call(IndexMask mask, MFParams params, MFContext /*context*/) const override
@@ -68,10 +70,9 @@ class GenericAppendFunction : public MultiFunction {
  public:
   GenericAppendFunction(const CPPType &type)
   {
-    MFSignatureBuilder signature{"Append"};
-    signature.vector_mutable("Vector", type);
-    signature.single_input("Value", type);
-    signature_ = signature.build();
+    MFSignatureBuilder builder{"Append", signature_};
+    builder.vector_mutable("Vector", type);
+    builder.single_input("Value", type);
     this->set_signature(&signature_);
   }
 
@@ -99,10 +100,11 @@ class ConcatVectorsFunction : public MultiFunction {
 
   static MFSignature create_signature()
   {
-    MFSignatureBuilder signature{"Concat Vectors"};
-    signature.vector_mutable<int>("A");
-    signature.vector_input<int>("B");
-    return signature.build();
+    MFSignature signature;
+    MFSignatureBuilder builder{"Concat Vectors", signature};
+    builder.vector_mutable<int>("A");
+    builder.vector_input<int>("B");
+    return signature;
   }
 
   void call(IndexMask mask, MFParams params, MFContext /*context*/) const override
@@ -123,10 +125,11 @@ class AppendFunction : public MultiFunction {
 
   static MFSignature create_signature()
   {
-    MFSignatureBuilder signature{"Append"};
-    signature.vector_mutable<int>("Vector");
-    signature.single_input<int>("Value");
-    return signature.build();
+    MFSignature signature;
+    MFSignatureBuil

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list