Commit: 49c3eb847869ee6bfb477bd20ce22dd409dc85e5
Author: Jacques Lucke
Date:   Wed Nov 27 14:42:15 2019 +0100
Branches: functions
https://developer.blender.org/rB49c3eb847869ee6bfb477bd20ce22dd409dc85e5

replace virtual with inlined tree

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

M       source/blender/blenkernel/BKE_inlined_node_tree.h
M       source/blender/blenkernel/intern/inlined_node_tree.cc
M       source/blender/functions/FN_vtree_multi_function_network.h
M       source/blender/functions/FN_vtree_multi_function_network_generation.h
M       source/blender/functions/intern/vtree_multi_function_network/builder.cc
M       source/blender/functions/intern/vtree_multi_function_network/builder.h
M       source/blender/functions/intern/vtree_multi_function_network/generate.cc
M       
source/blender/functions/intern/vtree_multi_function_network/mappings_nodes.cc
M       source/blender/modifiers/intern/MOD_functiondeform_cxx.cc
M       source/blender/modifiers/intern/MOD_functionpoints_cxx.cc
M       source/blender/simulations/bparticles/c_wrapper.cpp
M       source/blender/simulations/bparticles/node_frontend.cpp
M       source/blender/simulations/bparticles/node_frontend.hpp
M       source/blender/simulations/bparticles/particle_function_builder.cpp
M       source/blender/simulations/bparticles/particle_function_builder.hpp

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

diff --git a/source/blender/blenkernel/BKE_inlined_node_tree.h 
b/source/blender/blenkernel/BKE_inlined_node_tree.h
index 3040562ce08..ba0935bc359 100644
--- a/source/blender/blenkernel/BKE_inlined_node_tree.h
+++ b/source/blender/blenkernel/BKE_inlined_node_tree.h
@@ -23,6 +23,7 @@ class InlinedNodeTree;
 class XSocket : BLI::NonCopyable, BLI::NonMovable {
  protected:
   XNode *m_node;
+  const VSocket *m_vsocket;
   bool m_is_input;
 
   /* Input and output sockets share the same id-space. */
@@ -36,13 +37,17 @@ class XSocket : BLI::NonCopyable, BLI::NonMovable {
 
   bool is_input() const;
   bool is_output() const;
+  const XSocket &as_base() const;
   const XInputSocket &as_input() const;
   const XOutputSocket &as_output() const;
+
+  PointerRNA *rna() const;
+  StringRefNull idname() const;
+  StringRefNull name() const;
 };
 
 class XInputSocket : public XSocket {
  private:
-  const VInputSocket *m_vsocket;
   Vector<XOutputSocket *> m_linked_sockets;
   Vector<XGroupInput *> m_linked_group_inputs;
 
@@ -58,7 +63,6 @@ class XInputSocket : public XSocket {
 
 class XOutputSocket : public XSocket {
  private:
-  const VOutputSocket *m_vsocket;
   Vector<XInputSocket *> m_linked_sockets;
 
   friend InlinedNodeTree;
@@ -108,8 +112,14 @@ class XNode : BLI::NonCopyable, BLI::NonMovable {
 
   const XInputSocket &input(uint index) const;
   const XOutputSocket &output(uint index) const;
+  const XInputSocket &input(uint index, StringRef expected_name) const;
+  const XOutputSocket &output(uint index, StringRef expected_name) const;
 
   uint id() const;
+
+  PointerRNA *rna() const;
+  StringRefNull idname() const;
+  StringRefNull name() const;
 };
 
 class XParentNode : BLI::NonCopyable, BLI::NonMovable {
@@ -140,6 +150,8 @@ class InlinedNodeTree : BLI::NonCopyable, BLI::NonMovable {
   Vector<XInputSocket *> m_input_sockets;
   Vector<XOutputSocket *> m_output_sockets;
 
+  StringMap<Vector<XNode *>> m_nodes_by_idname;
+
  public:
   InlinedNodeTree(bNodeTree *btree, BTreeVTreeMap &vtrees);
   ~InlinedNodeTree();
@@ -147,6 +159,16 @@ class InlinedNodeTree : BLI::NonCopyable, BLI::NonMovable {
   std::string to_dot() const;
   void to_dot__clipboard() const;
 
+  const XSocket &socket_by_id(uint id) const;
+  uint socket_count() const;
+  uint node_count() const;
+
+  ArrayRef<const XSocket *> all_sockets() const;
+  ArrayRef<const XNode *> all_nodes() const;
+  ArrayRef<const XInputSocket *> all_input_sockets() const;
+  ArrayRef<const XOutputSocket *> all_output_sockets() const;
+  ArrayRef<const XNode *> nodes_with_idname(StringRef idname) const;
+
  private:
   void expand_groups(Vector<XNode *> &all_nodes,
                      Vector<XGroupInput *> &all_group_inputs,
@@ -209,11 +231,40 @@ inline const XOutputSocket &XNode::output(uint index) 
const
   return *m_outputs[index];
 }
 
+inline const XInputSocket &XNode::input(uint index, StringRef expected_name) 
const
+{
+  BLI_assert(m_inputs[index]->name() == expected_name);
+  UNUSED_VARS_NDEBUG(expected_name);
+  return *m_inputs[index];
+}
+
+inline const XOutputSocket &XNode::output(uint index, StringRef expected_name) 
const
+{
+  BLI_assert(m_outputs[index]->name() == expected_name);
+  UNUSED_VARS_NDEBUG(expected_name);
+  return *m_outputs[index];
+}
+
 inline uint XNode::id() const
 {
   return m_id;
 }
 
+inline PointerRNA *XNode::rna() const
+{
+  return m_vnode->rna();
+}
+
+inline StringRefNull XNode::idname() const
+{
+  return m_vnode->idname();
+}
+
+inline StringRefNull XNode::name() const
+{
+  return m_vnode->name();
+}
+
 inline const XParentNode *XParentNode::parent() const
 {
   return m_parent;
@@ -249,6 +300,11 @@ inline bool XSocket::is_output() const
   return !m_is_input;
 }
 
+inline const XSocket &XSocket::as_base() const
+{
+  return *this;
+}
+
 inline const XInputSocket &XSocket::as_input() const
 {
   BLI_assert(this->is_input());
@@ -261,9 +317,24 @@ inline const XOutputSocket &XSocket::as_output() const
   return *(const XOutputSocket *)this;
 }
 
+inline PointerRNA *XSocket::rna() const
+{
+  return m_vsocket->rna();
+}
+
+inline StringRefNull XSocket::idname() const
+{
+  return m_vsocket->idname();
+}
+
+inline StringRefNull XSocket::name() const
+{
+  return m_vsocket->name();
+}
+
 inline const VInputSocket &XInputSocket::vsocket() const
 {
-  return *m_vsocket;
+  return m_vsocket->as_input();
 }
 
 inline ArrayRef<const XOutputSocket *> XInputSocket::linked_sockets() const
@@ -283,7 +354,7 @@ inline bool XInputSocket::is_linked() const
 
 inline const VOutputSocket &XOutputSocket::vsocket() const
 {
-  return *m_vsocket;
+  return m_vsocket->as_output();
 }
 
 inline ArrayRef<const XInputSocket *> XOutputSocket::linked_sockets() const
@@ -311,6 +382,52 @@ inline uint XGroupInput::id() const
   return m_id;
 }
 
+inline const XSocket &InlinedNodeTree::socket_by_id(uint id) const
+{
+  return *m_sockets_by_id[id];
+}
+
+inline uint InlinedNodeTree::socket_count() const
+{
+  return m_sockets_by_id.size();
+}
+
+inline uint InlinedNodeTree::node_count() const
+{
+  return m_node_by_id.size();
+}
+
+inline ArrayRef<const XSocket *> InlinedNodeTree::all_sockets() const
+{
+  return m_sockets_by_id.as_ref();
+}
+
+inline ArrayRef<const XNode *> InlinedNodeTree::all_nodes() const
+{
+  return m_node_by_id.as_ref();
+}
+
+inline ArrayRef<const XInputSocket *> InlinedNodeTree::all_input_sockets() 
const
+{
+  return m_input_sockets.as_ref();
+}
+
+inline ArrayRef<const XOutputSocket *> InlinedNodeTree::all_output_sockets() 
const
+{
+  return m_output_sockets.as_ref();
+}
+
+inline ArrayRef<const XNode *> InlinedNodeTree::nodes_with_idname(StringRef 
idname) const
+{
+  auto *nodes = m_nodes_by_idname.lookup_ptr(idname);
+  if (nodes == nullptr) {
+    return {};
+  }
+  else {
+    return nodes->as_ref();
+  }
+}
+
 }  // namespace BKE
 
 #endif /* __BKE_INLINED_NODE_TREE_H__ */
diff --git a/source/blender/blenkernel/intern/inlined_node_tree.cc 
b/source/blender/blenkernel/intern/inlined_node_tree.cc
index 5fa1253110d..aefca7e8546 100644
--- a/source/blender/blenkernel/intern/inlined_node_tree.cc
+++ b/source/blender/blenkernel/intern/inlined_node_tree.cc
@@ -180,7 +180,7 @@ BLI_NOINLINE void 
InlinedNodeTree::expand_group__relink_inputs(
     if (outside_interface.is_linked()) {
       XGroupInput &group_input = 
*m_allocator.construct<XGroupInput>().release();
       group_input.m_id = all_group_inputs.append_and_get_index(&group_input);
-      group_input.m_vsocket = outside_interface.m_vsocket;
+      group_input.m_vsocket = &outside_interface.m_vsocket->as_input();
       group_input.m_parent = group_node.m_parent;
 
       group_input.m_linked_sockets.append(&outside_interface);
@@ -342,6 +342,13 @@ BLI_NOINLINE void 
InlinedNodeTree::store_tree_in_this_and_init_ids(
     XNode *xnode = m_node_by_id[node_index];
     xnode->m_id = node_index;
 
+    if (m_nodes_by_idname.contains(xnode->idname())) {
+      m_nodes_by_idname.lookup(xnode->idname()).append(xnode);
+    }
+    else {
+      m_nodes_by_idname.add_new(xnode->idname(), {xnode});
+    }
+
     for (XInputSocket *xsocket : xnode->m_inputs) {
       xsocket->m_id = m_sockets_by_id.append_and_get_index(xsocket);
       m_input_sockets.append(xsocket);
diff --git a/source/blender/functions/FN_vtree_multi_function_network.h 
b/source/blender/functions/FN_vtree_multi_function_network.h
index 1e18bec872b..2a543071b77 100644
--- a/source/blender/functions/FN_vtree_multi_function_network.h
+++ b/source/blender/functions/FN_vtree_multi_function_network.h
@@ -1,7 +1,7 @@
 #ifndef __FN_VTREE_MULTI_FUNCTION_NETWORK_H__
 #define __FN_VTREE_MULTI_FUNCTION_NETWORK_H__
 
-#include "BKE_virtual_node_tree.h"
+#include "BKE_inlined_node_tree.h"
 
 #include "BLI_multi_map.h"
 
@@ -9,11 +9,11 @@
 
 namespace FN {
 
-using BKE::VInputSocket;
-using BKE::VirtualNodeTree;
-using BKE::VNode;
-using BKE::VOutputSocket;
-using BKE::VSocket;
+using BKE::InlinedNodeTree;
+using BKE::XInputSocket;
+using BKE::XNode;
+using BKE::XOutputSocket;
+using BKE::XSocket;
 using BLI::MultiMap;
 
 #define VTreeMFSocketMap_UNMAPPED UINT_MAX
@@ -24,14 +24,14 @@ class VTreeMFSocketMap {
   /* An input vsocket can be mapped to multiple sockets.
    * An output vsocket can be mapped to at most one socket.
    */
-  const VirtualNodeTree *m_vtree;
+  const InlinedNodeTree *m_vtree;
   const MFNetwork *m_network;
   Array<uint> m_single_socket_by_vsocket;
   MultiMap<uint, uint> m_multiple_inputs_by_vsocket;
   Array<uint> m_vsocket_by_socket;
 
  public:
-  VTreeMFSocketMap(const VirtualNodeTree &vtree,
+  VTreeMFSocketMap(const InlinedNodeTree &vtree,
                    const MFNetwork &network,
                    Array<uint> single_socket_by_vsocket,
                    MultiMap<uint, uint> multiple_inputs_by_vsocket,
@@ -44,7 +44,7 @@ class VTreeMFSocketMap {
   {
   }
 
-  bool is_mapped(const VSocket &vsocket) const
+  bool is_mapped(const XSocket &vsocket) const
   {
     return m_single_socket_by_vsocket[vsocket.id()] < 
VTreeMFSocketMap_MULTIMAPPED;
   }
@@ -54,14 +54,14 @@ class VTreeMFSocketMap {
     return m_vsocket_by_socket[socket.id()] != VTreeMFSocketMap_UNMAPPED;
   }
 
-  const MFInputSocket &lookup_singly_mapped_input_socket(const VInputSocket 
&vsocket) const
+  const MFInputSocket &lookup_singly_mapped_input_socket(const XInputSocket 
&vsocket) const
   {
     BLI_assert(this->lookup_socket(vsocket).size() == 1);
     uint mapped_id = m_single_socket_by_vsocket[vsocket.id()];
     return m_network->socket_by_id(mapped_id).as_input();
   }
 
-  Vector<const MFInputSocket *> lookup_socket(const VInputSocket &vsocket) 
const
+  Vector<const MFInputSocket *> lookup_socket(const XInputSocket &vsocket) 
const
   {
     uint id = vsocket.id();
     uint mapped_value = m_single_socket_by_vsocket[id];
@@ -84,19 +84,19 @@ class VTreeMFSocketMap {
     }
   }
 
-  const MFOutputSocket &lookup_socket(const VOutputSocket &vsocket) const
+  const MFOutputSocket &lookup_socket(const XOutputSocket &vsocket) const
   {
     uint mapped_id = m_single_socket_by_vsocket[vsocket.id()];
     return m_network->socket_by_id(mapped_id).as_output();
   }
 
-  const VInputSocket &lookup_vsocket(const MFInputSocket &socket) const
+  const XInputSocket 

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to