[Bf-blender-cvs] [cf72da183dc] functions: fail early when node inserter does not work

Jacques Lucke noreply at git.blender.org
Fri Mar 22 11:58:02 CET 2019


Commit: cf72da183dc125bebf34feca5d61b3cd540351f6
Author: Jacques Lucke
Date:   Fri Mar 22 11:52:49 2019 +0100
Branches: functions
https://developer.blender.org/rBcf72da183dc125bebf34feca5d61b3cd540351f6

fail early when node inserter does not work

===================================================================

M	source/blender/functions/frontends/data_flow_nodes/builder.cpp
M	source/blender/functions/frontends/data_flow_nodes/builder.hpp
M	source/blender/functions/frontends/data_flow_nodes/inserters.cpp

===================================================================

diff --git a/source/blender/functions/frontends/data_flow_nodes/builder.cpp b/source/blender/functions/frontends/data_flow_nodes/builder.cpp
index d7c8c60f600..adef08cbab8 100644
--- a/source/blender/functions/frontends/data_flow_nodes/builder.cpp
+++ b/source/blender/functions/frontends/data_flow_nodes/builder.cpp
@@ -77,6 +77,40 @@ namespace FN { namespace DataFlowNodes {
 		return m_socket_map.lookup(bsocket);
 	}
 
+	bool Builder::check_if_sockets_are_mapped(
+		struct bNode *bnode,
+		bSocketList bsockets,
+		const BuilderContext &ctx) const
+	{
+		int index = 0;
+		for (bNodeSocket *bsocket : bsockets) {
+			if (ctx.is_data_socket(bsocket)) {
+				if (!m_socket_map.contains(bsocket)) {
+					std::cout << "Data Socket not mapped: " << std::endl;
+					std::cout << "    Tree: " << ctx.btree()->id.name << std::endl;
+					std::cout << "    Node: " << bnode->name << std::endl;
+					if (bsocket->in_out == SOCK_IN) {
+						std::cout << "    Input";
+					}
+					else {
+						std::cout << "    Output";
+					}
+					std::cout << " Index: " << index << std::endl;
+					return false;
+				}
+			}
+			index++;
+		}
+		return true;
+	}
+
+	bool Builder::verify_data_sockets_mapped(struct bNode *bnode, const BuilderContext &ctx) const
+	{
+		return (
+			this->check_if_sockets_are_mapped(bnode, bSocketList(&bnode->inputs), ctx) &&
+			this->check_if_sockets_are_mapped(bnode, bSocketList(&bnode->outputs), ctx));
+	}
+
 
 	struct bNodeTree *BuilderContext::btree() const
 	{
diff --git a/source/blender/functions/frontends/data_flow_nodes/builder.hpp b/source/blender/functions/frontends/data_flow_nodes/builder.hpp
index 4e7db7a493d..e3c4e0e7abd 100644
--- a/source/blender/functions/frontends/data_flow_nodes/builder.hpp
+++ b/source/blender/functions/frontends/data_flow_nodes/builder.hpp
@@ -1,6 +1,7 @@
 #pragma once
 
 #include "FN_core.hpp"
+#include "./util_wrappers.hpp"
 
 struct bNode;
 struct bNodeLink;
@@ -36,8 +37,16 @@ namespace FN { namespace DataFlowNodes {
 		void map_output(Socket socket, struct bNode *bnode, uint index);
 
 		Socket lookup_socket(struct bNodeSocket *bsocket);
+		bool verify_data_sockets_mapped(struct bNode *bnode, const BuilderContext &ctx) const;
+
+	private:
+		bool check_if_sockets_are_mapped(
+			struct bNode *bnode,
+			bSocketList bsockets,
+			const BuilderContext &ctx) const;
 	};
 
+
 	class BuilderContext {
 	private:
 		struct bNodeTree *m_btree;
diff --git a/source/blender/functions/frontends/data_flow_nodes/inserters.cpp b/source/blender/functions/frontends/data_flow_nodes/inserters.cpp
index 8820fb419bb..022e7c1704e 100644
--- a/source/blender/functions/frontends/data_flow_nodes/inserters.cpp
+++ b/source/blender/functions/frontends/data_flow_nodes/inserters.cpp
@@ -88,6 +88,8 @@ namespace FN { namespace DataFlowNodes {
 			return false;
 		}
 		(*inserter)(builder, ctx, bnode);
+
+		BLI_assert(builder.verify_data_sockets_mapped(bnode, ctx));
 		return true;
 	}



More information about the Bf-blender-cvs mailing list