[Bf-blender-cvs] [d6a7832f6de] functions: simplify virtual node tree usage

Jacques Lucke noreply at git.blender.org
Tue Jul 23 19:16:54 CEST 2019


Commit: d6a7832f6de24b8a9c8c0322534e186d42c388bc
Author: Jacques Lucke
Date:   Tue Jul 23 14:59:18 2019 +0200
Branches: functions
https://developer.blender.org/rBd6a7832f6de24b8a9c8c0322534e186d42c388bc

simplify virtual node tree usage

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

M	source/blender/blenkernel/BKE_node_tree.hpp
M	source/blender/blenkernel/intern/node_tree.cpp
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/graph_generation.cpp
M	source/blender/simulations/bparticles/inserters.cpp
M	source/blender/simulations/bparticles/node_frontend.cpp

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

diff --git a/source/blender/blenkernel/BKE_node_tree.hpp b/source/blender/blenkernel/BKE_node_tree.hpp
index 8e2c55eca84..4b4289255de 100644
--- a/source/blender/blenkernel/BKE_node_tree.hpp
+++ b/source/blender/blenkernel/BKE_node_tree.hpp
@@ -181,28 +181,28 @@ class VirtualNode {
   VirtualNodeTree *m_backlink;
   bNodeTree *m_btree;
   bNode *m_bnode;
-  ArrayRef<VirtualSocket> m_inputs;
-  ArrayRef<VirtualSocket> m_outputs;
+  ArrayRef<VirtualSocket *> m_inputs;
+  ArrayRef<VirtualSocket *> m_outputs;
 
  public:
-  ArrayRef<VirtualSocket> inputs()
+  ArrayRef<VirtualSocket *> inputs()
   {
     return m_inputs;
   }
 
-  ArrayRef<VirtualSocket> outputs()
+  ArrayRef<VirtualSocket *> outputs()
   {
     return m_outputs;
   }
 
   VirtualSocket *input(uint index)
   {
-    return &m_inputs[index];
+    return m_inputs[index];
   }
 
   VirtualSocket *output(uint index)
   {
-    return &m_outputs[index];
+    return m_outputs[index];
   }
 
   bNode *bnode()
@@ -247,12 +247,12 @@ class VirtualSocket {
  public:
   bool is_input() const
   {
-    return m_vnode->m_inputs.contains_ptr(this);
+    return this->m_bsocket->in_out == SOCK_IN;
   }
 
   bool is_output() const
   {
-    return m_vnode->m_outputs.contains_ptr(this);
+    return this->m_bsocket->in_out == SOCK_OUT;
   }
 
   bNodeSocket *bsocket()
diff --git a/source/blender/blenkernel/intern/node_tree.cpp b/source/blender/blenkernel/intern/node_tree.cpp
index ed113c1b26f..f2c78a61988 100644
--- a/source/blender/blenkernel/intern/node_tree.cpp
+++ b/source/blender/blenkernel/intern/node_tree.cpp
@@ -117,16 +117,16 @@ void VirtualNodeTree::add_all_of_tree(bNodeTree *btree)
     VirtualSocket *from_vsocket = nullptr;
     VirtualSocket *to_vsocket = nullptr;
 
-    for (VirtualSocket &output : from_node->outputs()) {
-      if (output.bsocket() == blink->fromsock) {
-        from_vsocket = &output;
+    for (VirtualSocket *output : from_node->outputs()) {
+      if (output->bsocket() == blink->fromsock) {
+        from_vsocket = output;
         break;
       }
     }
 
-    for (VirtualSocket &input : to_node->inputs()) {
-      if (input.bsocket() == blink->tosock) {
-        to_vsocket = &input;
+    for (VirtualSocket *input : to_node->inputs()) {
+      if (input->bsocket() == blink->tosock) {
+        to_vsocket = input;
         break;
       }
     }
@@ -149,22 +149,27 @@ VirtualNode *VirtualNodeTree::add_bnode(bNodeTree *btree, bNode *bnode)
   Vector<bNodeSocket *, 10> original_inputs(bnode->inputs, true);
   Vector<bNodeSocket *, 10> original_outputs(bnode->outputs, true);
 
-  vnode->m_inputs = m_allocator.allocate_array<VirtualSocket>(original_inputs.size());
-  vnode->m_outputs = m_allocator.allocate_array<VirtualSocket>(original_outputs.size());
+  auto inputs = m_allocator.allocate_array<VirtualSocket>(original_inputs.size());
+  auto outputs = m_allocator.allocate_array<VirtualSocket>(original_outputs.size());
+
+  vnode->m_inputs = m_allocator.allocate_array<VirtualSocket *>(inputs.size());
+  vnode->m_outputs = m_allocator.allocate_array<VirtualSocket *>(outputs.size());
 
   for (uint i = 0; i < original_inputs.size(); i++) {
-    VirtualSocket &vsocket = vnode->m_inputs[i];
+    VirtualSocket &vsocket = inputs[i];
     new (&vsocket) VirtualSocket();
     vsocket.m_vnode = vnode;
     vsocket.m_btree = btree;
     vsocket.m_bsocket = original_inputs[i];
+    vnode->m_inputs[i] = &vsocket;
   }
   for (uint i = 0; i < original_outputs.size(); i++) {
-    VirtualSocket &vsocket = vnode->m_outputs[i];
+    VirtualSocket &vsocket = outputs[i];
     new (&vsocket) VirtualSocket();
     vsocket.m_vnode = vnode;
     vsocket.m_btree = btree;
     vsocket.m_bsocket = original_outputs[i];
+    vnode->m_outputs[i] = &vsocket;
   }
 
   m_nodes.append(vnode);
@@ -220,8 +225,7 @@ static bool is_reroute(VirtualNode *vnode)
   return STREQ(vnode->bnode()->idname, "NodeReroute");
 }
 
-static void find_connected_sockets_left(VirtualSocket *vsocket,
-                                        Vector<VirtualSocket *> &r_found)
+static void find_connected_sockets_left(VirtualSocket *vsocket, Vector<VirtualSocket *> &r_found)
 {
   BLI_assert(vsocket->is_input());
   for (VirtualSocket *other : vsocket->direct_links()) {
@@ -234,8 +238,7 @@ static void find_connected_sockets_left(VirtualSocket *vsocket,
   }
 }
 
-static void find_connected_sockets_right(VirtualSocket *vsocket,
-                                         Vector<VirtualSocket *> &r_found)
+static void find_connected_sockets_right(VirtualSocket *vsocket, Vector<VirtualSocket *> &r_found)
 {
   BLI_assert(vsocket->is_output());
   for (VirtualSocket *other : vsocket->direct_links()) {
diff --git a/source/blender/functions/frontends/data_flow_nodes/builder.cpp b/source/blender/functions/frontends/data_flow_nodes/builder.cpp
index 4c4fd45267f..f0b8ec2229d 100644
--- a/source/blender/functions/frontends/data_flow_nodes/builder.cpp
+++ b/source/blender/functions/frontends/data_flow_nodes/builder.cpp
@@ -113,14 +113,14 @@ void BTreeGraphBuilder::map_sockets(DFGB_Node *node, VirtualNode *vnode)
   BLI_assert(vnode->outputs().size() == node->output_amount());
 
   uint input_index = 0;
-  for (VirtualSocket &vsocket : vnode->inputs()) {
-    this->map_socket(node->input(input_index), &vsocket);
+  for (VirtualSocket *vsocket : vnode->inputs()) {
+    this->map_socket(node->input(input_index), vsocket);
     input_index++;
   }
 
   uint output_index = 0;
-  for (VirtualSocket &vsocket : vnode->outputs()) {
-    this->map_socket(node->output(output_index), &vsocket);
+  for (VirtualSocket *vsocket : vnode->outputs()) {
+    this->map_socket(node->output(output_index), vsocket);
     output_index++;
   }
 }
@@ -128,17 +128,17 @@ void BTreeGraphBuilder::map_sockets(DFGB_Node *node, VirtualNode *vnode)
 void BTreeGraphBuilder::map_data_sockets(DFGB_Node *node, VirtualNode *vnode)
 {
   uint input_index = 0;
-  for (VirtualSocket &vsocket : vnode->inputs()) {
-    if (this->is_data_socket(&vsocket)) {
-      this->map_socket(node->input(input_index), &vsocket);
+  for (VirtualSocket *vsocket : vnode->inputs()) {
+    if (this->is_data_socket(vsocket)) {
+      this->map_socket(node->input(input_index), vsocket);
       input_index++;
     }
   }
 
   uint output_index = 0;
-  for (VirtualSocket &vsocket : vnode->outputs()) {
-    if (this->is_data_socket(&vsocket)) {
-      this->map_socket(node->output(output_index), &vsocket);
+  for (VirtualSocket *vsocket : vnode->outputs()) {
+    if (this->is_data_socket(vsocket)) {
+      this->map_socket(node->output(output_index), vsocket);
       output_index++;
     }
   }
@@ -165,16 +165,16 @@ DFGB_Socket BTreeGraphBuilder::lookup_socket(VirtualSocket *vsocket)
 }
 
 bool BTreeGraphBuilder::check_if_sockets_are_mapped(VirtualNode *vnode,
-                                                    ArrayRef<VirtualSocket> vsockets) const
+                                                    ArrayRef<VirtualSocket *> vsockets) const
 {
   int index = 0;
-  for (VirtualSocket &vsocket : vsockets) {
-    if (this->is_data_socket(&vsocket)) {
-      if (!m_socket_map.contains(&vsocket)) {
+  for (VirtualSocket *vsocket : vsockets) {
+    if (this->is_data_socket(vsocket)) {
+      if (!m_socket_map.contains(vsocket)) {
         std::cout << "Data DFGB_Socket not mapped: " << std::endl;
         std::cout << "    Tree: " << vnode->btree_id()->name << std::endl;
         std::cout << "    DFGB_Node: " << vnode->name() << std::endl;
-        if (vsocket.is_input()) {
+        if (vsocket->is_input()) {
           std::cout << "    Input";
         }
         else {
@@ -236,13 +236,13 @@ SharedType &BTreeGraphBuilder::type_from_rna(PointerRNA &rna, StringRefNull prop
 
 bool BTreeGraphBuilder::has_data_socket(VirtualNode *vnode) const
 {
-  for (VirtualSocket &vsocket : vnode->inputs()) {
-    if (this->is_data_socket(&vsocket)) {
+  for (VirtualSocket *vsocket : vnode->inputs()) {
+    if (this->is_data_socket(vsocket)) {
       return true;
     }
   }
-  for (VirtualSocket &vsocket : vnode->outputs()) {
-    if (this->is_data_socket(&vsocket)) {
+  for (VirtualSocket *vsocket : vnode->outputs()) {
+    if (this->is_data_socket(vsocket)) {
       return true;
     }
   }
diff --git a/source/blender/functions/frontends/data_flow_nodes/builder.hpp b/source/blender/functions/frontends/data_flow_nodes/builder.hpp
index 33579eade9a..a6c3f8dbb8e 100644
--- a/source/blender/functions/frontends/data_flow_nodes/builder.hpp
+++ b/source/blender/functions/frontends/data_flow_nodes/builder.hpp
@@ -64,7 +64,7 @@ class BTreeGraphBuilder {
   SharedType &type_from_rna(PointerRNA &rna, StringRefNull prop_name) const;
 
  private:
-  bool check_if_sockets_are_mapped(VirtualNode *vnode, ArrayRef<VirtualSocket> vsockets) const;
+  bool check_if_sockets_are_mapped(VirtualNode *vnode, ArrayRef<VirtualSocket *> vsockets) const;
 };
 
 }  // namespace DataFlowNodes
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 16b0c676088..fb739dfceb0 100644
--- a/source/blender/functions/frontends/data_flow_nodes/graph_generation.cpp
+++ b/source/blender/functions/frontends/data_flow_nodes/graph_generation.cpp
@@ -11,16 +11,16 @@ namespace DataFlowNodes {
 static void insert_placeholder_node(BTreeGraphBuilder &builder, VirtualNode *vnode)
 {
   FunctionBuilder fn_builder;
-  for (VirtualSocket &vsocket : vnode->inputs()) {
-    if (builder.is_data_socket(&vsocket)) {
-      SharedType &type = builder.query_socket_type(&vsocket);
-      fn_builder.add_input(builder.query_socket_name(&vsocket), type);
+  for (VirtualSocket *vsocket : vnode->inputs()) {
+    if (builder.is_data_socket(vsocket)) {
+      SharedType &type = builder.query_socket_type(vsocket);
+      fn_builder.add_input(builder.query_socket_name(vsocket), type);
     }
   }
-  for (VirtualSocket &vsocket : vnode->outputs()) {
-    if (builder.is_data_socket(&vsocket)) {
-      SharedType &type = builder.query_socket_type(&vsocket);
-      fn_builder.add_output(builder.query_socket_name(&vsocket), type);
+  for (VirtualSocket *vsocket : vnode->outputs()) {
+    if (bu

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list