[Bf-blender-cvs] [09862e2b2ff] functions-experimental-refactor: assert earlier when nodes were not inserted correctly
Jacques Lucke
noreply at git.blender.org
Mon Nov 4 23:17:06 CET 2019
Commit: 09862e2b2ff77fdaea2afb3b0022e208eb94ef6d
Author: Jacques Lucke
Date: Mon Nov 4 23:16:46 2019 +0100
Branches: functions-experimental-refactor
https://developer.blender.org/rB09862e2b2ff77fdaea2afb3b0022e208eb94ef6d
assert earlier when nodes were not inserted correctly
===================================================================
M source/blender/blenkernel/BKE_virtual_node_tree.h
M source/blender/functions2/FN_generic_vector_array.h
M source/blender/functions2/intern/vtree_multi_function_network/builder.cc
M source/blender/functions2/intern/vtree_multi_function_network/builder.h
M source/blender/functions2/intern/vtree_multi_function_network/generate.cc
===================================================================
diff --git a/source/blender/blenkernel/BKE_virtual_node_tree.h b/source/blender/blenkernel/BKE_virtual_node_tree.h
index a260d632c99..de5c84b3e7c 100644
--- a/source/blender/blenkernel/BKE_virtual_node_tree.h
+++ b/source/blender/blenkernel/BKE_virtual_node_tree.h
@@ -152,6 +152,7 @@ class VSocket : BLI::NonCopyable, BLI::NonMovable {
bool is_input() const;
bool is_output() const;
+ const VSocket &as_base() const;
const VInputSocket &as_input() const;
const VOutputSocket &as_output() const;
@@ -342,6 +343,11 @@ inline bool VSocket::is_linked() const
return m_linked_sockets.size() > 0;
}
+inline const VSocket &VSocket::as_base() const
+{
+ return *this;
+}
+
inline const VInputSocket &VSocket::as_input() const
{
BLI_assert(this->is_input());
diff --git a/source/blender/functions2/FN_generic_vector_array.h b/source/blender/functions2/FN_generic_vector_array.h
index bb1658f7503..64c280435f3 100644
--- a/source/blender/functions2/FN_generic_vector_array.h
+++ b/source/blender/functions2/FN_generic_vector_array.h
@@ -151,6 +151,13 @@ class GenericVectorArray : BLI::NonCopyable, BLI::NonMovable {
{
m_data->append_single__copy(index, (void *)&value);
}
+
+ void extend_single(uint index, ArrayRef<T> values)
+ {
+ for (const T &value : values) {
+ this->append_single(index, value);
+ }
+ }
};
template<typename T> const TypedRef<T> as_typed_ref() const
diff --git a/source/blender/functions2/intern/vtree_multi_function_network/builder.cc b/source/blender/functions2/intern/vtree_multi_function_network/builder.cc
index b5c6412d2be..35729429b5a 100644
--- a/source/blender/functions2/intern/vtree_multi_function_network/builder.cc
+++ b/source/blender/functions2/intern/vtree_multi_function_network/builder.cc
@@ -92,27 +92,30 @@ void VTreeMFNetworkBuilder::map_data_sockets(const VNode &vnode, MFBuilderNode &
}
}
-bool VTreeMFNetworkBuilder::data_sockets_are_mapped(ArrayRef<const VSocket *> vsockets) const
+void VTreeMFNetworkBuilder::assert_vnode_is_mapped_correctly(const VNode &vnode) const
+{
+ this->assert_data_sockets_are_mapped_correctly(vnode.inputs().cast<const VSocket *>());
+ this->assert_data_sockets_are_mapped_correctly(vnode.outputs().cast<const VSocket *>());
+}
+
+void VTreeMFNetworkBuilder::assert_data_sockets_are_mapped_correctly(
+ ArrayRef<const VSocket *> vsockets) const
{
for (const VSocket *vsocket : vsockets) {
if (this->is_data_socket(*vsocket)) {
- if (!this->vsocket_is_mapped(*vsocket)) {
- return false;
- }
+ this->assert_vsocket_is_mapped_correctly(*vsocket);
}
}
- return true;
}
-bool VTreeMFNetworkBuilder::data_sockets_of_vnode_are_mapped(const VNode &vnode) const
+void VTreeMFNetworkBuilder::assert_vsocket_is_mapped_correctly(const VSocket &vsocket) const
{
- if (!this->data_sockets_are_mapped(vnode.inputs().cast<const VSocket *>())) {
- return false;
- }
- if (!this->data_sockets_are_mapped(vnode.outputs().cast<const VSocket *>())) {
- return false;
- }
- return true;
+ BLI_assert(this->vsocket_is_mapped(vsocket));
+ MFBuilderSocket &socket = this->lookup_socket(vsocket);
+ MFDataType socket_type = socket.type();
+ MFDataType vsocket_type = this->try_get_data_type(vsocket);
+ BLI_assert(socket_type == vsocket_type);
+ UNUSED_VARS_NDEBUG(socket_type, vsocket_type);
}
bool VTreeMFNetworkBuilder::has_data_sockets(const VNode &vnode) const
diff --git a/source/blender/functions2/intern/vtree_multi_function_network/builder.h b/source/blender/functions2/intern/vtree_multi_function_network/builder.h
index a12d5413b3e..5987c574763 100644
--- a/source/blender/functions2/intern/vtree_multi_function_network/builder.h
+++ b/source/blender/functions2/intern/vtree_multi_function_network/builder.h
@@ -95,9 +95,9 @@ class VTreeMFNetworkBuilder : BLI::NonCopyable, BLI::NonMovable {
return m_socket_map[vsocket.id()] != nullptr;
}
- bool data_sockets_are_mapped(ArrayRef<const VSocket *> vsockets) const;
-
- bool data_sockets_of_vnode_are_mapped(const VNode &vnode) const;
+ void assert_vnode_is_mapped_correctly(const VNode &vnode) const;
+ void assert_data_sockets_are_mapped_correctly(ArrayRef<const VSocket *> vsockets) const;
+ void assert_vsocket_is_mapped_correctly(const VSocket &vsocket) const;
bool has_data_sockets(const VNode &vnode) const;
@@ -107,18 +107,21 @@ class VTreeMFNetworkBuilder : BLI::NonCopyable, BLI::NonMovable {
return socket.as_input().origin() != nullptr;
}
- MFBuilderOutputSocket &lookup_socket(const VOutputSocket &vsocket) const
+ MFBuilderSocket &lookup_socket(const VSocket &vsocket) const
{
MFBuilderSocket *socket = m_socket_map[vsocket.id()];
BLI_assert(socket != nullptr);
- return socket->as_output();
+ return *socket;
+ }
+
+ MFBuilderOutputSocket &lookup_socket(const VOutputSocket &vsocket) const
+ {
+ return this->lookup_socket(vsocket.as_base()).as_output();
}
MFBuilderInputSocket &lookup_socket(const VInputSocket &vsocket) const
{
- MFBuilderSocket *socket = m_socket_map[vsocket.id()];
- BLI_assert(socket != nullptr);
- return socket->as_input();
+ return this->lookup_socket(vsocket.as_base()).as_input();
}
const CPPType &cpp_type_by_name(StringRef name) const
diff --git a/source/blender/functions2/intern/vtree_multi_function_network/generate.cc b/source/blender/functions2/intern/vtree_multi_function_network/generate.cc
index 8ac2164a64a..5a86c03536b 100644
--- a/source/blender/functions2/intern/vtree_multi_function_network/generate.cc
+++ b/source/blender/functions2/intern/vtree_multi_function_network/generate.cc
@@ -20,7 +20,9 @@ static bool insert_nodes(VTreeMFNetworkBuilder &builder,
if (inserter != nullptr) {
(*inserter)(builder, *vnode);
- BLI_assert(builder.data_sockets_of_vnode_are_mapped(*vnode));
+#ifdef DEBUG
+ builder.assert_vnode_is_mapped_correctly(*vnode);
+#endif
}
else if (builder.has_data_sockets(*vnode)) {
builder.add_dummy(*vnode);
More information about the Bf-blender-cvs
mailing list