[Bf-blender-cvs] [4dfc1e9026c] functions: pass MFParams directly

Jacques Lucke noreply at git.blender.org
Wed Nov 13 14:23:34 CET 2019


Commit: 4dfc1e9026c60b8fc2966aac4e1dd54713d64c76
Author: Jacques Lucke
Date:   Wed Nov 13 11:53:28 2019 +0100
Branches: functions
https://developer.blender.org/rB4dfc1e9026c60b8fc2966aac4e1dd54713d64c76

pass MFParams directly

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

M	source/blender/functions/FN_multi_function.h
M	source/blender/functions/FN_multi_function_mask.h
M	source/blender/functions/intern/multi_functions/lists.cc
M	source/blender/functions/intern/multi_functions/lists.h
M	source/blender/functions/intern/multi_functions/mixed.cc
M	source/blender/functions/intern/multi_functions/mixed.h
M	source/blender/functions/intern/multi_functions/network.cc
M	source/blender/functions/intern/multi_functions/network.h
M	source/blender/modifiers/intern/MOD_functiondeform_cxx.cc
M	source/blender/modifiers/intern/MOD_functionpoints_cxx.cc
M	source/blender/simulations/bparticles/node_frontend.cpp
M	source/blender/simulations/bparticles/particle_function.cpp
M	source/blender/simulations/bparticles/particle_function_builder.cpp

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

diff --git a/source/blender/functions/FN_multi_function.h b/source/blender/functions/FN_multi_function.h
index 9eee03448ad..9b6274486d7 100644
--- a/source/blender/functions/FN_multi_function.h
+++ b/source/blender/functions/FN_multi_function.h
@@ -204,101 +204,14 @@ class MFSignatureBuilder {
   }
 };
 
-class MFParams {
- public:
-  MFParams() = default;
-
-  MFParams(ArrayRef<GenericVirtualListRef> virtual_list_refs,
-           ArrayRef<GenericMutableArrayRef> mutable_array_refs,
-           ArrayRef<GenericVirtualListListRef> virtual_list_list_refs,
-           ArrayRef<GenericVectorArray *> vector_arrays,
-           const MFSignature &signature)
-      : m_virtual_list_refs(virtual_list_refs),
-        m_mutable_array_refs(mutable_array_refs),
-        m_virtual_list_list_refs(virtual_list_list_refs),
-        m_vector_arrays(vector_arrays),
-        m_signature(&signature)
-  {
-  }
-
-  template<typename T> VirtualListRef<T> readonly_single_input(uint index, StringRef name = "")
-  {
-    BLI_assert(m_signature->is_readonly_single_input<T>(index, name));
-    return this->readonly_single_input(index, name).as_typed_ref<T>();
-  }
-
-  GenericVirtualListRef readonly_single_input(uint index, StringRef name = "")
-  {
-    UNUSED_VARS_NDEBUG(name);
-    BLI_assert(m_signature->is_readonly_single_input(index, name));
-    uint corrected_index = m_signature->get_corrected_index(index);
-    return m_virtual_list_refs[corrected_index];
-  }
-
-  template<typename T>
-  MutableArrayRef<T> uninitialized_single_output(uint index, StringRef name = "")
-  {
-    BLI_assert(m_signature->is_single_output<T>(index, name));
-    return this->uninitialized_single_output(index, name).as_typed_ref<T>();
-  }
-  GenericMutableArrayRef uninitialized_single_output(uint index, StringRef name = "")
-  {
-    UNUSED_VARS_NDEBUG(name);
-    BLI_assert(m_signature->is_single_output(index, name));
-    uint corrected_index = m_signature->get_corrected_index(index);
-    return m_mutable_array_refs[corrected_index];
-  }
-
-  template<typename T>
-  const VirtualListListRef<T> readonly_vector_input(uint index, StringRef name = "")
-  {
-    BLI_assert(m_signature->is_readonly_vector_input<T>(index, name));
-    return this->readonly_vector_input(index, name).as_typed_ref<T>();
-  }
-  GenericVirtualListListRef readonly_vector_input(uint index, StringRef name = "")
-  {
-    UNUSED_VARS_NDEBUG(name);
-    BLI_assert(m_signature->is_readonly_vector_input(index, name));
-    uint corrected_index = m_signature->get_corrected_index(index);
-    return m_virtual_list_list_refs[corrected_index];
-  }
-
-  template<typename T>
-  GenericVectorArray::MutableTypedRef<T> vector_output(uint index, StringRef name = "")
-  {
-    BLI_assert(m_signature->is_vector_output<T>(index, name));
-    return this->vector_output(index, name).as_mutable_typed_ref<T>();
-  }
-  GenericVectorArray &vector_output(uint index, StringRef name = "")
-  {
-    UNUSED_VARS_NDEBUG(name);
-    BLI_assert(m_signature->is_vector_output(index, name));
-    uint corrected_index = m_signature->get_corrected_index(index);
-    return *m_vector_arrays[corrected_index];
-  }
-
-  GenericVectorArray &mutable_vector(uint index, StringRef name = "")
-  {
-    UNUSED_VARS_NDEBUG(name);
-    BLI_assert(m_signature->is_mutable_vector(index, name));
-    uint corrected_index = m_signature->get_corrected_index(index);
-    return *m_vector_arrays[corrected_index];
-  }
-
- private:
-  ArrayRef<GenericVirtualListRef> m_virtual_list_refs;
-  ArrayRef<GenericMutableArrayRef> m_mutable_array_refs;
-  ArrayRef<GenericVirtualListListRef> m_virtual_list_list_refs;
-  ArrayRef<GenericVectorArray *> m_vector_arrays;
-  const MFSignature *m_signature = nullptr;
-};
+class MFParams;
 
 class MultiFunction {
  public:
   virtual ~MultiFunction()
   {
   }
-  virtual void call(MFMask mask, MFParams &params, MFContext &context) const = 0;
+  virtual void call(MFMask mask, MFParams params, MFContext &context) const = 0;
 
   IndexRange param_indices() const
   {
@@ -341,7 +254,7 @@ class MFParamsBuilder {
   const MFSignature *m_signature = nullptr;
   uint m_min_array_size;
 
-  MFParams m_params;
+  friend MFParams;
 
  public:
   MFParamsBuilder(const MultiFunction &function, uint min_array_size)
@@ -396,17 +309,80 @@ class MFParamsBuilder {
     BLI_assert(vector_array.size() >= m_min_array_size);
     m_vector_arrays.append(&vector_array);
   }
+};
+
+class MFParams {
+ public:
+  MFParams(MFParamsBuilder &builder) : m_builder(&builder)
+  {
+  }
+
+  template<typename T> VirtualListRef<T> readonly_single_input(uint index, StringRef name = "")
+  {
+    BLI_assert(m_builder->m_signature->is_readonly_single_input<T>(index, name));
+    return this->readonly_single_input(index, name).as_typed_ref<T>();
+  }
+
+  GenericVirtualListRef readonly_single_input(uint index, StringRef name = "")
+  {
+    UNUSED_VARS_NDEBUG(name);
+    BLI_assert(m_builder->m_signature->is_readonly_single_input(index, name));
+    uint corrected_index = m_builder->m_signature->get_corrected_index(index);
+    return m_builder->m_virtual_list_refs[corrected_index];
+  }
+
+  template<typename T>
+  MutableArrayRef<T> uninitialized_single_output(uint index, StringRef name = "")
+  {
+    BLI_assert(m_builder->m_signature->is_single_output<T>(index, name));
+    return this->uninitialized_single_output(index, name).as_typed_ref<T>();
+  }
+  GenericMutableArrayRef uninitialized_single_output(uint index, StringRef name = "")
+  {
+    UNUSED_VARS_NDEBUG(name);
+    BLI_assert(m_builder->m_signature->is_single_output(index, name));
+    uint corrected_index = m_builder->m_signature->get_corrected_index(index);
+    return m_builder->m_mutable_array_refs[corrected_index];
+  }
+
+  template<typename T>
+  const VirtualListListRef<T> readonly_vector_input(uint index, StringRef name = "")
+  {
+    BLI_assert(m_builder->m_signature->is_readonly_vector_input<T>(index, name));
+    return this->readonly_vector_input(index, name).as_typed_ref<T>();
+  }
+  GenericVirtualListListRef readonly_vector_input(uint index, StringRef name = "")
+  {
+    UNUSED_VARS_NDEBUG(name);
+    BLI_assert(m_builder->m_signature->is_readonly_vector_input(index, name));
+    uint corrected_index = m_builder->m_signature->get_corrected_index(index);
+    return m_builder->m_virtual_list_list_refs[corrected_index];
+  }
+
+  template<typename T>
+  GenericVectorArray::MutableTypedRef<T> vector_output(uint index, StringRef name = "")
+  {
+    BLI_assert(m_builder->m_signature->is_vector_output<T>(index, name));
+    return this->vector_output(index, name).as_mutable_typed_ref<T>();
+  }
+  GenericVectorArray &vector_output(uint index, StringRef name = "")
+  {
+    UNUSED_VARS_NDEBUG(name);
+    BLI_assert(m_builder->m_signature->is_vector_output(index, name));
+    uint corrected_index = m_builder->m_signature->get_corrected_index(index);
+    return *m_builder->m_vector_arrays[corrected_index];
+  }
 
-  MFParams &build()
+  GenericVectorArray &mutable_vector(uint index, StringRef name = "")
   {
-    BLI_assert(m_signature != nullptr);
-    m_params = MFParams(m_virtual_list_refs,
-                        m_mutable_array_refs,
-                        m_virtual_list_list_refs,
-                        m_vector_arrays,
-                        *m_signature);
-    return m_params;
+    UNUSED_VARS_NDEBUG(name);
+    BLI_assert(m_builder->m_signature->is_mutable_vector(index, name));
+    uint corrected_index = m_builder->m_signature->get_corrected_index(index);
+    return *m_builder->m_vector_arrays[corrected_index];
   }
+
+ private:
+  MFParamsBuilder *m_builder;
 };
 
 };  // namespace FN
diff --git a/source/blender/functions/FN_multi_function_mask.h b/source/blender/functions/FN_multi_function_mask.h
index fe056efdcad..a6fade0b3ba 100644
--- a/source/blender/functions/FN_multi_function_mask.h
+++ b/source/blender/functions/FN_multi_function_mask.h
@@ -23,6 +23,14 @@ class MFMask {
 #endif
   }
 
+  MFMask(IndexRange range) : m_indices(range.as_array_ref())
+  {
+  }
+
+  MFMask(const std::initializer_list<uint> &list) : MFMask(ArrayRef<uint>(list))
+  {
+  }
+
   uint indices_amount() const
   {
     return m_indices.size();
diff --git a/source/blender/functions/intern/multi_functions/lists.cc b/source/blender/functions/intern/multi_functions/lists.cc
index d57e67f9139..efcb79ceda0 100644
--- a/source/blender/functions/intern/multi_functions/lists.cc
+++ b/source/blender/functions/intern/multi_functions/lists.cc
@@ -37,7 +37,7 @@ MF_PackList::MF_PackList(const CPPType &base_type, ArrayRef<bool> input_list_sta
   this->set_signature(signature);
 }
 
-void MF_PackList::call(MFMask mask, MFParams &params, MFContext &UNUSED(context)) const
+void MF_PackList::call(MFMask mask, MFParams params, MFContext &UNUSED(context)) const
 {
   GenericVectorArray *vector_array;
   bool is_mutating_first_list;
@@ -86,7 +86,7 @@ MF_GetListElement::MF_GetListElement(const CPPType &base_type) : m_base_type(bas
   this->set_signature(signature);
 }
 
-void MF_GetListElement::call(MFMask mask, MFParams &params, MFContext &UNUSED(context)) const
+void MF_GetListElement::call(MFMask mask, MFParams params, MFContext &UNUSED(context)) const
 {
   GenericVirtualListListRef lists = params.readonly_vector_input(0, "List");
   VirtualListRef<int> indices = params.readonly_single_input<int>(1, "Index");
@@ -115,7 +115,7 @@ MF_ListLength::MF_ListLength(const CPPType &base_type) : m_base_type(base_type)
   this->set_signature(signature);
 }
 
-void MF_ListLength::call(MFMask mask, MFParams &params, MFContext &UNUSED(context)) const
+void MF_ListLength::call(MFMask mask, MFParams params, MFContext &UNUSED(context)) const
 {
   GenericVirtualListListRef lists = params.readonly_vector_input(0, "List");
   MutableArrayRef<int> lengths = params.uninitialized_single_output<int>(1, "Length");
diff --git a/source/blender/functions/intern/multi_functions/lists.h b/source/blender/functions/intern/multi_functions/lists.h
index 5a9d2bc9e53..dbbf388b0b2 100644
--- a/source/blender/functions/intern/multi_functions/lists.h
+++ b/source/blender/functions/intern/multi_functions/lists.h
@@ -10,7 +10,7 @@ class MF_GetListElement 

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list