[Bf-blender-cvs] [3235d6cd41c] functions: pass MFContext directly

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


Commit: 3235d6cd41c3227b32d652daa2f4fc4365a6c1f5
Author: Jacques Lucke
Date:   Wed Nov 13 12:02:16 2019 +0100
Branches: functions
https://developer.blender.org/rB3235d6cd41c3227b32d652daa2f4fc4365a6c1f5

pass MFContext directly

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

M	source/blender/functions/FN_multi_function.h
M	source/blender/functions/FN_multi_function_context.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 9b6274486d7..d4214620aed 100644
--- a/source/blender/functions/FN_multi_function.h
+++ b/source/blender/functions/FN_multi_function.h
@@ -211,7 +211,7 @@ class MultiFunction {
   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
   {
diff --git a/source/blender/functions/FN_multi_function_context.h b/source/blender/functions/FN_multi_function_context.h
index a825a327d13..dbcfbf8d50d 100644
--- a/source/blender/functions/FN_multi_function_context.h
+++ b/source/blender/functions/FN_multi_function_context.h
@@ -21,19 +21,14 @@ class MFElementContext {
 
 class MFElementContexts {
  private:
-  ArrayRef<const MFElementContext *> m_contexts;
-  ArrayRef<VirtualListRef<uint>> m_indices;
+  Vector<const MFElementContext *> m_contexts;
+  Vector<VirtualListRef<uint>> m_indices;
+
+  friend class MFContextBuilder;
 
  public:
   MFElementContexts() = default;
 
-  MFElementContexts(ArrayRef<const MFElementContext *> contexts,
-                    ArrayRef<VirtualListRef<uint>> indices)
-      : m_contexts(contexts), m_indices(indices)
-  {
-    BLI_assert(contexts.size() == indices.size());
-  }
-
   template<typename T> struct TypedContext {
     const T *data;
     VirtualListRef<uint> indices;
@@ -52,27 +47,11 @@ class MFElementContexts {
   }
 };
 
-class MFContext : BLI::NonCopyable, BLI::NonMovable {
+class MFContextBuilder : BLI::NonCopyable, BLI::NonMovable {
  private:
   MFElementContexts m_element_contexts;
 
- public:
-  MFContext() = default;
-  MFContext(MFElementContexts element_contexts) : m_element_contexts(element_contexts)
-  {
-  }
-
-  const MFElementContexts &element_contexts() const
-  {
-    return m_element_contexts;
-  }
-};
-
-class MFContextBuilder {
- private:
-  Vector<const MFElementContext *> m_element_contexts;
-  Vector<VirtualListRef<uint>> m_element_context_indices;
-  MFContext m_context;
+  friend class MFContext;
 
  public:
   MFContextBuilder()
@@ -81,8 +60,8 @@ class MFContextBuilder {
 
   void add_element_context(const MFElementContext *context, VirtualListRef<uint> indices)
   {
-    m_element_contexts.append(context);
-    m_element_context_indices.append(indices);
+    m_element_contexts.m_contexts.append(context);
+    m_element_contexts.m_indices.append(indices);
   }
 
   void add_element_context(const MFElementContext *context)
@@ -90,12 +69,20 @@ class MFContextBuilder {
     static uint dummy_index = 0;
     this->add_element_context(context, VirtualListRef<uint>::FromSingle_MaxSize(&dummy_index));
   }
+};
+
+class MFContext {
+ private:
+  MFContextBuilder *m_builder;
 
-  MFContext &build()
+ public:
+  MFContext(MFContextBuilder &builder) : m_builder(&builder)
+  {
+  }
+
+  const MFElementContexts &element_contexts() const
   {
-    m_context.~MFContext();
-    new (&m_context) MFContext(MFElementContexts(m_element_contexts, m_element_context_indices));
-    return m_context;
+    return m_builder->m_element_contexts;
   }
 };
 
diff --git a/source/blender/functions/intern/multi_functions/lists.cc b/source/blender/functions/intern/multi_functions/lists.cc
index efcb79ceda0..bea3e28c2b4 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 dbbf388b0b2..b601cbaba13 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 final : public MultiFunction {
 
  public:
   MF_GetListElement(const CPPType &base_type);
-  void call(MFMask mask, MFParams params, MFContext &context) const override;
+  void call(MFMask mask, MFParams params, MFContext context) const override;
 };
 
 class MF_ListLength final : public MultiFunction {
@@ -19,7 +19,7 @@ class MF_ListLength final : public MultiFunction {
 
  public:
   MF_ListLength(const CPPType &base_type);
-  void call(MFMask mask, MFParams params, MFContext &context) const override;
+  void call(MFMask mask, MFParams params, MFContext context) const override;
 };
 
 class MF_PackList final : public MultiFunction {
@@ -29,7 +29,7 @@ class MF_PackList final : public MultiFunction {
 
  public:
   MF_PackList(const CPPType &base_type, ArrayRef<bool> input_list_status);
-  void call(MFMask mask, MFParams params, MFContext &context) const override;
+  void call(MFMask mask, MFParams params, MFContext context) const override;
 
  private:
   bool input_is_list(uint index) const;
@@ -44,9 +44,7 @@ template<typename T> class MF_EmptyList : public MultiFunction {
     this->set_signature(signature);
   }
 
-  void call(MFMask UNUSED(mask),
-            MFParams UNUSED(params),
-            MFContext &UNUSED(context)) const override
+  void call(MFMask UNUSED(mask), MFParams UNUSED(params), MFContext UNUSED(context)) const override
   {
   }
 };
@@ -62,7 +60,7 @@ template<typename FromT, typename ToT> class MF_ConvertList : public MultiFuncti
     this->set_signature(signature);
   }
 
-  void call(MFMask mask, MFParams params, MFContext &UNUSED(context)) const override
+  void call(MFMask mask, MFParams params, MFContext UNUSED(context)) const override
   {
     VirtualListListRef<FromT> inputs = params.readonly_vector_input<FromT>(0, "Inputs");
     GenericVectorArray::MutableTypedRef<ToT> outputs = params.vector_output<ToT>(1, "Outputs");
@@ -89,7 +87,7 @@ template<typename T> class MF_SingleElementList : public MultiFunction {
     this->set_signature(signature);
   }
 
-  void call(MFMask mask, MFParams params, MFContext &UNUSED(context)) const override
+  void call(MFMask mask, MFParams params, MFContext UNUSED(context)) const override
   {
     VirtualListRef<T> inputs = params.readonly_single_input<T>(0, "Input");
     GenericVectorArray::MutableTypedRef<T> outputs = params.vector_output<T>(1, "Outputs");
diff --git a/source/blender/functions/intern/multi_functions/mixed.cc b/source/blender/functions/intern/multi_functions/mixed.cc
index e45f72a1381..5ac88cdbdc1 100644
--- a/source/blender/functions/intern/multi_functions/mixed.cc
+++ b/source/blender/functions/intern/multi_functions/mixed.cc
@@ -31,7 +31,7 @@ MF_AddFloats::MF_AddFloats()
   this->set_signature(signature);
 }
 
-void MF_AddFloats::call(MFMask mask, MFParams params, MFContext &UNUSED(context)) const
+void MF_AddFloats::call(MFMask mask, MFParams params, MFContext UNUSED(context)) const
 {
   auto a = params.readonly_single_input<float>(0, "A");
   auto b = params.readonly_single_input<float>(1, "B");
@@ -51,7 +51,7 @@ MF_AddFloat3s::MF_AddFloat3s()
   this->set_signature(signature);
 }
 
-void MF_AddFloat3s::call(MFMask mask, MFParams params, MFContext &UNUSED(context)) const
+void MF_AddFloat3s::call(MFMask mask, MFParams params, MFContext UNUSED(context)) const
 {
   auto a = params.readonly_single_input<float3>(0, "A");
   auto b = params.readonly_single_input<float3>(1, "B");
@@ -73,7 +73,7 @@ MF_CombineColor::MF_CombineColor()
   this->set_signature(signature);
 }
 
-void MF_CombineColor::call(MFMask mask, MFParams params, MFContext &UNUSED(context)) const
+void MF_CombineColor::call(MFMask mask, MFParams params, MFContext UNUSED(context)) const
 {
   VirtualListRef<float> r = params.readonly_single_input<float>(0, "R");
   VirtualListRef<float> g = params.readonly_single_input<float>(1, "G");
@@ -97,7 +97,7 @@ MF_SeparateColor::MF_SeparateColor()
   this->set_signature(signature);
 }
 
-void MF_SeparateColor::call(MFMask mask, MFParams params, MFContext &UNUSED(context)) const
+void MF_SeparateColor::call(MFMask mask, MFParams params, MFContext UNUSED(context)) const
 {
   auto color = params.readonly_single_input<rgba_f>(0, "Color");
   auto r = params.uninitialized_single_output<float>(1, "R");
@@ -124,7 +124,7 @@ MF_CombineVector::MF_CombineVector()
   this->set_signature(signature);
 }
 
-void MF_CombineVector::call(MFMask mask, MFParams params, MFContext &UNUSED(context)) const
+void MF_CombineVector::call(MFMask mask, MFParams params, MFContext UNUSED(context)) const
 {
   VirtualListRef<float> x = params.readonly_single_input<float>(0, "X");
   VirtualListRef<float> y = params.readonly_single_input<float>(1, "Y");
@@ -146,7 +146,7 @@ MF_SeparateVector::MF_SeparateVector()
   this->set_signature(signature);
 }
 
-void MF_SeparateVector::call(MFMask mask, MFParams params, MFContext &UNUSED(context)) const
+void MF_SeparateVector::call(MFMask mask, MFParams params, MFContext UNUSED(context)) const
 {
   auto vector = params.readonly_singl

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list