[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