[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 ¶ms, 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 ¶ms, 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 ¶ms, 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 ¶ms, 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