[Bf-blender-cvs] [df9f633] object_nodes: Changed node instance storage in the node graph to pointers.

Lukas Tönne noreply at git.blender.org
Wed Nov 25 09:31:38 CET 2015


Commit: df9f633da2f505d94018a628d4e31e6e3a3cf12e
Author: Lukas Tönne
Date:   Wed Nov 25 09:09:30 2015 +0100
Branches: object_nodes
https://developer.blender.org/rBdf9f633da2f505d94018a628d4e31e6e3a3cf12e

Changed node instance storage in the node graph to pointers.

This makes it much easier to optimize the graph by removing and reconnecting nodes.

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

M	source/blender/blenvm/compile/bvm_codegen.cc
M	source/blender/blenvm/compile/bvm_nodegraph.cc
M	source/blender/blenvm/compile/bvm_nodegraph.h

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

diff --git a/source/blender/blenvm/compile/bvm_codegen.cc b/source/blender/blenvm/compile/bvm_codegen.cc
index 0dc1961..1dcbf3e 100644
--- a/source/blender/blenvm/compile/bvm_codegen.cc
+++ b/source/blender/blenvm/compile/bvm_codegen.cc
@@ -292,7 +292,7 @@ static void sort_nodes(const NodeGraph &graph, NodeList &result)
 	NodeSet visited;
 	
 	for (NodeGraph::NodeInstanceMap::const_iterator it = graph.nodes.begin(); it != graph.nodes.end(); ++it) {
-		sort_nodes_append(&it->second, result, visited);
+		sort_nodes_append(it->second, result, visited);
 	}
 }
 
@@ -302,24 +302,24 @@ static void count_output_users(const NodeGraph &graph, SocketUserMap &users)
 {
 	users.clear();
 	for (NodeGraph::NodeInstanceMap::const_iterator it = graph.nodes.begin(); it != graph.nodes.end(); ++it) {
-		const NodeInstance &node = it->second;
-		for (int i = 0; i < node.num_outputs(); ++i) {
-			ConstSocketPair key(&node, node.type->outputs[i].name);
+		const NodeInstance *node = it->second;
+		for (int i = 0; i < node->num_outputs(); ++i) {
+			ConstSocketPair key(node, node->type->outputs[i].name);
 			users[key] = 0;
 		}
 	}
 	
 	for (NodeGraph::NodeInstanceMap::const_iterator it = graph.nodes.begin(); it != graph.nodes.end(); ++it) {
-		const NodeInstance &node = it->second;
+		const NodeInstance *node = it->second;
 		
 		/* note: pass nodes are normally removed, but can exist for debugging purposes */
-		if (node.type->is_pass)
+		if (node->type->is_pass)
 			continue;
 		
-		for (int i = 0; i < node.num_inputs(); ++i) {
-			if (node.has_input_link(i)) {
-				ConstSocketPair key(node.find_input_link_node(i),
-				                    node.find_input_link_socket(i)->name);
+		for (int i = 0; i < node->num_inputs(); ++i) {
+			if (node->has_input_link(i)) {
+				ConstSocketPair key(node->find_input_link_node(i),
+				                    node->find_input_link_socket(i)->name);
 				users[key] += 1;
 			}
 		}
diff --git a/source/blender/blenvm/compile/bvm_nodegraph.cc b/source/blender/blenvm/compile/bvm_nodegraph.cc
index 1bdd965..a85491e 100644
--- a/source/blender/blenvm/compile/bvm_nodegraph.cc
+++ b/source/blender/blenvm/compile/bvm_nodegraph.cc
@@ -421,12 +421,13 @@ NodeGraph::NodeGraph()
 
 NodeGraph::~NodeGraph()
 {
+	remove_all_nodes();
 }
 
 NodeInstance *NodeGraph::get_node(const string &name)
 {
 	NodeInstanceMap::iterator it = nodes.find(name);
-	return (it != nodes.end())? &it->second : NULL;
+	return (it != nodes.end())? it->second : NULL;
 }
 
 NodeInstance *NodeGraph::add_node(const string &type, const string &name)
@@ -446,10 +447,11 @@ NodeInstance *NodeGraph::add_node(const string &type, const string &name)
 		final = ss.str();
 	}
 	
+	NodeInstance *node = new NodeInstance(nodetype, final);
 	std::pair<NodeInstanceMap::iterator, bool> result =
-	        nodes.insert(NodeInstanceMapPair(final, NodeInstance(nodetype, final)));
+	        nodes.insert(NodeInstanceMapPair(final, node));
 	
-	return (result.second)? &result.first->second : NULL;
+	return (result.second)? result.first->second : NULL;
 }
 
 const NodeGraphInput *NodeGraph::get_input(int index) const
@@ -650,17 +652,25 @@ SocketPair NodeGraph::add_type_converter(const SocketPair &from, const TypeDesc
 /* ------------------------------------------------------------------------- */
 /* Optimization */
 
+void NodeGraph::remove_all_nodes()
+{
+	for (NodeInstanceMap::iterator it = nodes.begin(); it != nodes.end(); ++it) {
+		delete it->second;
+	}
+	nodes.clear();
+}
+
 void NodeGraph::skip_pass_nodes()
 {
 	/* redirect links to skip over 'pass'-type nodes */
 	for (NodeInstanceMap::iterator it = nodes.begin(); it != nodes.end(); ++it) {
-		NodeInstance &node = it->second;
+		NodeInstance *node = it->second;
 		
-		if (node.type->is_pass)
+		if (node->type->is_pass)
 			continue;
 		
-		for (NodeInstance::InputMap::iterator it_input = node.inputs.begin();
-		     it_input != node.inputs.end();
+		for (NodeInstance::InputMap::iterator it_input = node->inputs.begin();
+		     it_input != node->inputs.end();
 		     ++it_input) {
 			NodeInstance::InputInstance &input = it_input->second;
 			
@@ -705,7 +715,7 @@ void NodeGraph::dump(std::ostream &s)
 	s << "NodeGraph\n";
 	
 	for (NodeInstanceMap::const_iterator it = nodes.begin(); it != nodes.end(); ++it) {
-		const NodeInstance *node = &it->second;
+		const NodeInstance *node = it->second;
 		const NodeType *type = node->type;
 		s << "  Node '" << node->name << "'\n";
 		
@@ -973,7 +983,7 @@ void NodeGraph::dump_graphviz(FILE *f, const string &label)
 	debug_fprintf(ctx, "];" NL);
 
 	for (NodeInstanceMap::const_iterator it = nodes.begin(); it != nodes.end(); ++it) {
-		const NodeInstance *node = &it->second;
+		const NodeInstance *node = it->second;
 		debug_graphviz_node(ctx, node);
 	}
 	
@@ -987,7 +997,7 @@ void NodeGraph::dump_graphviz(FILE *f, const string &label)
 	}
 	
 	for (NodeInstanceMap::const_iterator it = nodes.begin(); it != nodes.end(); ++it) {
-		const NodeInstance *node = &it->second;
+		const NodeInstance *node = it->second;
 		debug_graphviz_node_links(ctx, node);
 	}
 	for (OutputList::const_iterator it = outputs.begin(); it != outputs.end(); ++it) {
diff --git a/source/blender/blenvm/compile/bvm_nodegraph.h b/source/blender/blenvm/compile/bvm_nodegraph.h
index 76fe30d..4bf66d4 100644
--- a/source/blender/blenvm/compile/bvm_nodegraph.h
+++ b/source/blender/blenvm/compile/bvm_nodegraph.h
@@ -277,8 +277,8 @@ struct NodeGraph {
 	
 	typedef std::map<string, NodeType> NodeTypeMap;
 	typedef std::pair<string, NodeType> NodeTypeMapPair;
-	typedef std::map<string, NodeInstance> NodeInstanceMap;
-	typedef std::pair<string, NodeInstance> NodeInstanceMapPair;
+	typedef std::map<string, NodeInstance*> NodeInstanceMap;
+	typedef std::pair<string, NodeInstance*> NodeInstanceMapPair;
 	
 	static NodeTypeMap node_types;
 	
@@ -353,6 +353,7 @@ protected:
 	SocketPair add_matrix44_converter(const SocketPair &/*from*/, BVMType /*to_type*/);
 	SocketPair add_type_converter(const SocketPair &from, const TypeDesc &to_typedesc);
 	
+	void remove_all_nodes();
 	void skip_pass_nodes();
 	
 public:




More information about the Bf-blender-cvs mailing list