[Bf-blender-cvs] [8667a871347] functions: Revert "try storing values per input differently"
Jacques Lucke
noreply at git.blender.org
Mon Jan 27 22:09:51 CET 2020
Commit: 8667a8713474c4c90a74b3473d85542aafd1fd1e
Author: Jacques Lucke
Date: Sun Jan 26 11:06:54 2020 +0100
Branches: functions
https://developer.blender.org/rB8667a8713474c4c90a74b3473d85542aafd1fd1e
Revert "try storing values per input differently"
This reverts commit fee675ffe08f1c92ee3d181fe4350061850511f1.
===================================================================
M source/blender/functions/intern/multi_functions/network.cc
===================================================================
diff --git a/source/blender/functions/intern/multi_functions/network.cc b/source/blender/functions/intern/multi_functions/network.cc
index 367cc341179..8f337f4ad16 100644
--- a/source/blender/functions/intern/multi_functions/network.cc
+++ b/source/blender/functions/intern/multi_functions/network.cc
@@ -6,40 +6,18 @@ namespace FN {
using BLI::ArrayAllocator;
-namespace InputValueType {
-enum Enum {
- None,
- VectorArray,
- Array,
- VirtualList,
- VirtualListList,
-};
-}
-
-struct InputValue {
- InputValueType::Enum type;
-
- union Value {
- Value()
- {
- }
-
- GenericVectorArray *vector_array;
- GenericMutableArrayRef array_ref;
- GenericVirtualListRef virtual_list_ref;
- GenericVirtualListListRef virtual_list_list_ref;
- } data;
-};
-
class MF_EvaluateNetwork_Storage {
private:
- MonotonicAllocator<256> m_monotonic_allocator;
+ MonotonicAllocator<256> m_single_allocator;
IndexMask m_mask;
ArrayAllocator &m_array_allocator;
Vector<GenericVectorArray *> m_vector_arrays;
Vector<GenericMutableArrayRef> m_arrays;
Vector<GenericMutableArrayRef> m_single_element_arrays;
- Map<uint, InputValue *> m_value_by_input;
+ Map<uint, GenericVectorArray *> m_vector_array_for_inputs;
+ Map<uint, GenericVirtualListRef> m_virtual_list_for_inputs;
+ Map<uint, GenericVirtualListListRef> m_virtual_list_list_for_inputs;
+ Map<uint, GenericMutableArrayRef> m_array_ref_for_inputs;
public:
MF_EvaluateNetwork_Storage(IndexMask mask, ArrayAllocator &array_allocator)
@@ -78,7 +56,7 @@ class MF_EvaluateNetwork_Storage {
GenericMutableArrayRef allocate_array__single_element(const CPPType &type)
{
- void *buffer = m_monotonic_allocator.allocate(type.size(), type.alignment());
+ void *buffer = m_single_allocator.allocate(type.size(), type.alignment());
GenericMutableArrayRef array(type, buffer, 1);
m_single_element_arrays.append(array);
return array;
@@ -150,67 +128,55 @@ class MF_EvaluateNetwork_Storage {
void set_array_ref(const MFInputSocket &socket, GenericMutableArrayRef array)
{
- InputValue *input_value = m_monotonic_allocator.allocate<InputValue>();
- input_value->type = InputValueType::Array;
- new (&input_value->data.array_ref) GenericMutableArrayRef(array);
- m_value_by_input.add_new(socket.id(), input_value);
+ m_array_ref_for_inputs.add_new(socket.id(), array);
}
void set_virtual_list(const MFInputSocket &socket, GenericVirtualListRef list)
{
- InputValue *input_value = m_monotonic_allocator.allocate<InputValue>();
- input_value->type = InputValueType::VirtualList;
- new (&input_value->data.virtual_list_ref) GenericVirtualListRef(list);
- m_value_by_input.add_new(socket.id(), input_value);
+ m_virtual_list_for_inputs.add_new(socket.id(), list);
}
void set_virtual_list_list(const MFInputSocket &socket, GenericVirtualListListRef list)
{
- InputValue *input_value = m_monotonic_allocator.allocate<InputValue>();
- input_value->type = InputValueType::VirtualListList;
- new (&input_value->data.virtual_list_list_ref) GenericVirtualListListRef(list);
- m_value_by_input.add_new(socket.id(), input_value);
+ m_virtual_list_list_for_inputs.add_new(socket.id(), list);
}
void set_vector_array(const MFInputSocket &socket, GenericVectorArray &vector_array)
{
- InputValue *input_value = m_monotonic_allocator.allocate<InputValue>();
- input_value->type = InputValueType::VectorArray;
- input_value->data.vector_array = &vector_array;
- m_value_by_input.add_new(socket.id(), input_value);
+ m_vector_array_for_inputs.add_new(socket.id(), &vector_array);
}
GenericVirtualListRef get_virtual_list(const MFInputSocket &socket) const
{
- InputValue *input_value = m_value_by_input.lookup(socket.id());
- BLI_assert(input_value->type == InputValueType::VirtualList);
- return input_value->data.virtual_list_ref;
+ return m_virtual_list_for_inputs.lookup(socket.id());
}
GenericVirtualListListRef get_virtual_list_list(const MFInputSocket &socket) const
{
- InputValue *input_value = m_value_by_input.lookup(socket.id());
- BLI_assert(input_value->type == InputValueType::VirtualListList);
- return input_value->data.virtual_list_list_ref;
+ return m_virtual_list_list_for_inputs.lookup(socket.id());
}
GenericVectorArray &get_vector_array(const MFInputSocket &socket) const
{
- InputValue *input_value = m_value_by_input.lookup(socket.id());
- BLI_assert(input_value->type == InputValueType::VectorArray);
- return *input_value->data.vector_array;
+ return *m_vector_array_for_inputs.lookup(socket.id());
}
GenericMutableArrayRef get_array_ref(const MFInputSocket &socket) const
{
- InputValue *input_value = m_value_by_input.lookup(socket.id());
- BLI_assert(input_value->type == InputValueType::Array);
- return input_value->data.array_ref;
+ return m_array_ref_for_inputs.lookup(socket.id());
}
bool input_is_computed(const MFInputSocket &socket) const
{
- return m_value_by_input.contains(socket.id());
+ switch (socket.data_type().category()) {
+ case MFDataType::Single:
+ return m_virtual_list_for_inputs.contains(socket.id());
+ case MFDataType::Vector:
+ return m_virtual_list_list_for_inputs.contains(socket.id()) ||
+ m_vector_array_for_inputs.contains(socket.id());
+ }
+ BLI_assert(false);
+ return false;
}
bool function_input_has_single_element(const MFInputSocket &socket) const
@@ -219,13 +185,13 @@ class MF_EvaluateNetwork_Storage {
MFParamType param_type = socket.param_type();
switch (param_type.type()) {
case MFParamType::SingleInput:
- return this->get_virtual_list(socket).is_single_element();
+ return m_virtual_list_for_inputs.lookup(socket.id()).is_single_element();
case MFParamType::VectorInput:
- return this->get_virtual_list_list(socket).is_single_list();
+ return m_virtual_list_list_for_inputs.lookup(socket.id()).is_single_list();
case MFParamType::MutableSingle:
- return this->get_array_ref(socket).size() == 1;
+ return m_array_ref_for_inputs.lookup(socket.id()).size() == 1;
case MFParamType::MutableVector:
- return this->get_vector_array(socket).size() == 1;
+ return m_vector_array_for_inputs.lookup(socket.id())->size() == 1;
case MFParamType::SingleOutput:
case MFParamType::VectorOutput:
break;
More information about the Bf-blender-cvs
mailing list