[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 ¶m : 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