[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