[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