[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