[Bf-blender-cvs] [7c035655944] functions: add utility to check if an input is only a single value
Jacques Lucke
noreply at git.blender.org
Fri Dec 6 13:39:11 CET 2019
Commit: 7c035655944d53dd3c449a6da24173adb117156e
Author: Jacques Lucke
Date: Fri Dec 6 13:30:10 2019 +0100
Branches: functions
https://developer.blender.org/rB7c035655944d53dd3c449a6da24173adb117156e
add utility to check if an input is only a single value
===================================================================
M source/blender/functions/FN_generic_virtual_list_list_ref.h
M source/blender/functions/FN_generic_virtual_list_ref.h
M source/blender/functions/intern/multi_functions/network.h
===================================================================
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 7a309780bb7..9ccaef6b019 100644
--- a/source/blender/functions/FN_generic_virtual_list_list_ref.h
+++ b/source/blender/functions/FN_generic_virtual_list_list_ref.h
@@ -81,6 +81,18 @@ class GenericVirtualListListRef {
return *m_type;
}
+ bool is_single_list() const
+ {
+ switch (m_category) {
+ case Category::SingleArray:
+ return true;
+ case Category::FullArrayList:
+ return m_virtual_list_size == 1;
+ }
+ BLI_assert(false);
+ return false;
+ }
+
GenericVirtualListRef operator[](uint index) const
{
BLI_assert(index < m_virtual_list_size);
diff --git a/source/blender/functions/FN_generic_virtual_list_ref.h b/source/blender/functions/FN_generic_virtual_list_ref.h
index 7bb38edc992..0646a18a210 100644
--- a/source/blender/functions/FN_generic_virtual_list_ref.h
+++ b/source/blender/functions/FN_generic_virtual_list_ref.h
@@ -123,6 +123,22 @@ class GenericVirtualListRef {
}
}
+ bool is_single_element() const
+ {
+ switch (m_category) {
+ case Category::Single:
+ return true;
+ case Category::FullArray:
+ return m_virtual_size == 1;
+ case Category::FullPointerArray:
+ return m_virtual_size == 1;
+ case Category::RepeatedArray:
+ return m_data.repeated_array.real_size == 1;
+ }
+ BLI_assert(false);
+ return false;
+ }
+
uint size() const
{
return m_virtual_size;
diff --git a/source/blender/functions/intern/multi_functions/network.h b/source/blender/functions/intern/multi_functions/network.h
index 59bdea92dcd..628ea32373e 100644
--- a/source/blender/functions/intern/multi_functions/network.h
+++ b/source/blender/functions/intern/multi_functions/network.h
@@ -137,6 +137,27 @@ class MF_EvaluateNetwork final : public MultiFunction {
BLI_assert(false);
return false;
}
+
+ bool function_input_has_single_element(const MFInputSocket &socket) const
+ {
+ BLI_assert(socket.node().is_function());
+ MFParamType param_type = socket.param_type();
+ switch (param_type.type()) {
+ case MFParamType::SingleInput:
+ return m_virtual_list_for_inputs.lookup(socket.id()).is_single_element();
+ case MFParamType::VectorInput:
+ return m_virtual_list_list_for_inputs.lookup(socket.id()).is_single_list();
+ case MFParamType::MutableSingle:
+ return m_array_ref_for_inputs.lookup(socket.id()).size() == 1;
+ case MFParamType::MutableVector:
+ return m_vector_array_for_inputs.lookup(socket.id())->size() == 1;
+ case MFParamType::SingleOutput:
+ case MFParamType::VectorOutput:
+ break;
+ }
+ BLI_assert(false);
+ return false;
+ }
};
void call(MFMask mask, MFParams params, MFContext context) const override;
More information about the Bf-blender-cvs
mailing list