[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