[Bf-blender-cvs] [376f4813dd3] functions-experimental-refactor: experiment with an interface to specify external data dependencies

Jacques Lucke noreply at git.blender.org
Wed Oct 16 13:17:52 CEST 2019


Commit: 376f4813dd3e04a3399d5521f310bb7ddc04e2d3
Author: Jacques Lucke
Date:   Wed Oct 16 12:57:21 2019 +0200
Branches: functions-experimental-refactor
https://developer.blender.org/rB376f4813dd3e04a3399d5521f310bb7ddc04e2d3

experiment with an interface to specify external data dependencies

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

M	source/blender/blenkernel/BKE_multi_function.h

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

diff --git a/source/blender/blenkernel/BKE_multi_function.h b/source/blender/blenkernel/BKE_multi_function.h
index 08eb45c6ac0..e12fa55bc2d 100644
--- a/source/blender/blenkernel/BKE_multi_function.h
+++ b/source/blender/blenkernel/BKE_multi_function.h
@@ -90,13 +90,18 @@ class MultiFunction {
    private:
     Vector<std::string> m_param_names;
     Vector<ParamType> m_param_types;
+    Vector<uint> m_params_with_external_dependencies;
     Vector<uint> m_corrected_indices;
 
    public:
     Signature() = default;
 
-    Signature(Vector<std::string> param_names, Vector<ParamType> param_types)
-        : m_param_names(std::move(param_names)), m_param_types(std::move(param_types))
+    Signature(Vector<std::string> param_names,
+              Vector<ParamType> param_types,
+              Vector<uint> params_with_external_dependencies)
+        : m_param_names(std::move(param_names)),
+          m_param_types(std::move(param_types)),
+          m_params_with_external_dependencies(std::move(params_with_external_dependencies))
     {
       uint array_or_single_refs = 0;
       uint mutable_array_refs = 0;
@@ -204,6 +209,7 @@ class MultiFunction {
     Vector<std::string> m_param_names;
     Vector<ParamType> m_param_types;
     Vector<CPPType *> m_param_base_types;
+    Vector<uint> m_params_with_external_dependencies;
 
    public:
     template<typename T> void readonly_single_input(StringRef name)
@@ -216,12 +222,15 @@ class MultiFunction {
       m_param_types.append(ParamType(ParamType::SingleInput, &type));
     }
 
-    template<typename T> void single_output(StringRef name)
+    template<typename T> void single_output(StringRef name, bool has_external_dependencies = false)
     {
-      this->single_output(name, GET_TYPE<T>());
+      this->single_output(name, GET_TYPE<T>(), has_external_dependencies);
     }
-    void single_output(StringRef name, CPPType &type)
+    void single_output(StringRef name, CPPType &type, bool has_external_dependencies = false)
     {
+      if (has_external_dependencies) {
+        m_params_with_external_dependencies.append(m_param_names.size());
+      }
       m_param_names.append(name);
       m_param_types.append(ParamType(ParamType::SingleOutput, &type));
     }
@@ -236,25 +245,33 @@ class MultiFunction {
       m_param_types.append(ParamType(ParamType::VectorInput, &base_type));
     }
 
-    template<typename T> void vector_output(StringRef name)
+    template<typename T> void vector_output(StringRef name, bool has_external_dependencies = false)
     {
-      this->vector_output(name, GET_TYPE<T>());
+      this->vector_output(name, GET_TYPE<T>(), has_external_dependencies);
     }
-    void vector_output(StringRef name, CPPType &base_type)
+    void vector_output(StringRef name, CPPType &base_type, bool has_external_dependencies = false)
     {
+      if (has_external_dependencies) {
+        m_params_with_external_dependencies.append(m_param_names.size());
+      }
       m_param_names.append(name);
       m_param_types.append(ParamType(ParamType::VectorOutput, &base_type));
     }
 
-    void mutable_vector(StringRef name, CPPType &base_type)
+    void mutable_vector(StringRef name, CPPType &base_type, bool has_external_dependencies = false)
     {
+      if (has_external_dependencies) {
+        m_params_with_external_dependencies.append(m_param_names.size());
+      }
       m_param_names.append(name);
       m_param_types.append(ParamType(ParamType::MutableVector, &base_type));
     }
 
     Signature build()
     {
-      return Signature(std::move(m_param_names), std::move(m_param_types));
+      return Signature(std::move(m_param_names),
+                       std::move(m_param_types),
+                       std::move(m_params_with_external_dependencies));
     }
   };



More information about the Bf-blender-cvs mailing list