[Bf-blender-cvs] [a6b5767d27d] functions: rename NodeTreeQuery to IndexedNodeTree

Jacques Lucke noreply at git.blender.org
Thu Jul 4 16:45:46 CEST 2019


Commit: a6b5767d27d77975d4523cc3d8217ca9ecd0c7b5
Author: Jacques Lucke
Date:   Thu Jul 4 10:29:35 2019 +0200
Branches: functions
https://developer.blender.org/rBa6b5767d27d77975d4523cc3d8217ca9ecd0c7b5

rename NodeTreeQuery to IndexedNodeTree

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

M	source/blender/blenkernel/BKE_node_tree.hpp
M	source/blender/blenkernel/intern/node_tree.cpp
M	source/blender/functions/frontends/data_flow_nodes/graph_generation.cpp
M	source/blender/simulations/bparticles/c_wrapper.cpp

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

diff --git a/source/blender/blenkernel/BKE_node_tree.hpp b/source/blender/blenkernel/BKE_node_tree.hpp
index c1542bb98be..60899b9ff6d 100644
--- a/source/blender/blenkernel/BKE_node_tree.hpp
+++ b/source/blender/blenkernel/BKE_node_tree.hpp
@@ -22,9 +22,18 @@ using bNodeList = ListBaseWrapper<struct bNode *, true>;
 using bLinkList = ListBaseWrapper<struct bNodeLink *, true>;
 using bSocketList = ListBaseWrapper<struct bNodeSocket *, true>;
 
-class NodeTreeQuery {
+/**
+ * The DNA structure of a node tree is difficult to parse, since it does not support e.g. the
+ * following queries efficiently:
+ *   - Which nodes have a specific type?
+ *   - Which node corresponds to a socket?
+ *   - Which other sockets are connected to a socket (with and without reroutes)?
+ *
+ * This data structure does some preprocessing to make these queries more efficient.
+ */
+class IndexedNodeTree {
  public:
-  NodeTreeQuery(bNodeTree *btree);
+  IndexedNodeTree(bNodeTree *btree);
 
   struct SingleOriginLink {
     bNodeSocket *from;
diff --git a/source/blender/blenkernel/intern/node_tree.cpp b/source/blender/blenkernel/intern/node_tree.cpp
index 240388d1e89..243f20ff710 100644
--- a/source/blender/blenkernel/intern/node_tree.cpp
+++ b/source/blender/blenkernel/intern/node_tree.cpp
@@ -3,7 +3,7 @@
 
 namespace BKE {
 
-NodeTreeQuery::NodeTreeQuery(bNodeTree *btree)
+IndexedNodeTree::IndexedNodeTree(bNodeTree *btree)
     : m_nodes(btree->nodes, true), m_links(btree->links, true)
 {
   for (bNode *bnode : m_nodes) {
@@ -38,8 +38,8 @@ NodeTreeQuery::NodeTreeQuery(bNodeTree *btree)
   }
 }
 
-void NodeTreeQuery::find_connected_sockets_left(bNodeSocket *bsocket,
-                                                SmallVector<bNodeSocket *> &r_sockets) const
+void IndexedNodeTree::find_connected_sockets_left(bNodeSocket *bsocket,
+                                                  SmallVector<bNodeSocket *> &r_sockets) const
 {
   BLI_assert(bsocket->in_out == SOCK_IN);
   for (bNodeSocket *other : m_direct_links.lookup_default(bsocket)) {
@@ -52,8 +52,8 @@ void NodeTreeQuery::find_connected_sockets_left(bNodeSocket *bsocket,
     }
   }
 }
-void NodeTreeQuery::find_connected_sockets_right(bNodeSocket *bsocket,
-                                                 SmallVector<bNodeSocket *> &r_sockets) const
+void IndexedNodeTree::find_connected_sockets_right(bNodeSocket *bsocket,
+                                                   SmallVector<bNodeSocket *> &r_sockets) const
 {
   BLI_assert(bsocket->in_out == SOCK_OUT);
   for (bNodeSocket *other : m_direct_links.lookup_default(bsocket)) {
@@ -67,12 +67,12 @@ void NodeTreeQuery::find_connected_sockets_right(bNodeSocket *bsocket,
   }
 }
 
-bool NodeTreeQuery::is_reroute(bNode *bnode) const
+bool IndexedNodeTree::is_reroute(bNode *bnode) const
 {
   return STREQ(bnode->idname, "NodeReroute");
 }
 
-SmallVector<bNode *> NodeTreeQuery::nodes_with_idname(StringRef idname) const
+SmallVector<bNode *> IndexedNodeTree::nodes_with_idname(StringRef idname) const
 {
   SmallVector<bNode *> result;
   for (bNode *bnode : m_nodes) {
@@ -83,7 +83,7 @@ SmallVector<bNode *> NodeTreeQuery::nodes_with_idname(StringRef idname) const
   return result;
 }
 
-SmallVector<bNode *> NodeTreeQuery::nodes_connected_to_socket(bNodeSocket *bsocket) const
+SmallVector<bNode *> IndexedNodeTree::nodes_connected_to_socket(bNodeSocket *bsocket) const
 {
   SmallVector<bNode *> result;
   for (bNodeSocket *other : m_links_without_reroutes.lookup_default(bsocket)) {
diff --git a/source/blender/functions/frontends/data_flow_nodes/graph_generation.cpp b/source/blender/functions/frontends/data_flow_nodes/graph_generation.cpp
index 6f519b0434f..6e68e7d1111 100644
--- a/source/blender/functions/frontends/data_flow_nodes/graph_generation.cpp
+++ b/source/blender/functions/frontends/data_flow_nodes/graph_generation.cpp
@@ -8,7 +8,7 @@
 namespace FN {
 namespace DataFlowNodes {
 
-using BKE::NodeTreeQuery;
+using BKE::IndexedNodeTree;
 
 static bool is_input_node(const bNode *bnode)
 {
@@ -139,8 +139,8 @@ static DFGB_SocketVector insert_function_output(BTreeGraphBuilder &builder)
 
 static bool insert_links(BTreeGraphBuilder &builder, GraphInserters &inserters)
 {
-  NodeTreeQuery btree_query(builder.btree());
-  for (auto &link : btree_query.single_origin_links()) {
+  IndexedNodeTree indexed_btree(builder.btree());
+  for (auto &link : indexed_btree.single_origin_links()) {
     if (!builder.is_data_socket(link.to)) {
       continue;
     }
diff --git a/source/blender/simulations/bparticles/c_wrapper.cpp b/source/blender/simulations/bparticles/c_wrapper.cpp
index 688ed9edeaa..717f9f972fa 100644
--- a/source/blender/simulations/bparticles/c_wrapper.cpp
+++ b/source/blender/simulations/bparticles/c_wrapper.cpp
@@ -38,7 +38,7 @@
 
 using namespace BParticles;
 
-using BKE::NodeTreeQuery;
+using BKE::IndexedNodeTree;
 using BLI::ArrayRef;
 using BLI::float3;
 using BLI::SmallVector;
@@ -225,13 +225,13 @@ class ModifierStepDescription : public StepDescription {
   }
 };
 
-class BParticlesTreeQuery : public NodeTreeQuery {
+class BParticlesTreeQuery : public IndexedNodeTree {
  private:
   SmallVector<bNode *> m_particle_type_nodes;
   SmallVector<bNode *> m_emitter_nodes;
 
  public:
-  BParticlesTreeQuery(bNodeTree *btree) : NodeTreeQuery(btree)
+  BParticlesTreeQuery(bNodeTree *btree) : IndexedNodeTree(btree)
   {
     m_particle_type_nodes = this->nodes_with_idname("bp_ParticleTypeNode");
     m_emitter_nodes = this->nodes_with_idname("bp_MeshEmitterNode");
@@ -251,9 +251,9 @@ class BParticlesTreeQuery : public NodeTreeQuery {
 static ModifierStepDescription *step_description_from_node_tree(bNodeTree *btree)
 {
   ModifierStepDescription *step_description = new ModifierStepDescription();
-  BParticlesTreeQuery btree_query(btree);
+  BParticlesTreeQuery indexed_btree(btree);
 
-  auto type_nodes = btree_query.type_nodes();
+  auto type_nodes = indexed_btree.type_nodes();
   for (uint i = 0; i < type_nodes.size(); i++) {
     bNode *particle_type_node = type_nodes[i];
 
@@ -265,10 +265,10 @@ static ModifierStepDescription *step_description_from_node_tree(bNodeTree *btree
     step_description->m_particle_type_names.append(type_name);
   }
 
-  auto emitter_nodes = btree_query.emitter_nodes();
+  auto emitter_nodes = indexed_btree.emitter_nodes();
   for (bNode *emitter_node : emitter_nodes) {
     bNodeSocket *emitter_output = (bNodeSocket *)emitter_node->outputs.first;
-    auto connected_nodes = btree_query.nodes_connected_to_socket(emitter_output);
+    auto connected_nodes = indexed_btree.nodes_connected_to_socket(emitter_output);
     for (bNode *connected_node : connected_nodes) {
       PointerRNA rna;
       RNA_pointer_create(&btree->id, &RNA_Node, emitter_node, &rna);



More information about the Bf-blender-cvs mailing list