[Bf-blender-cvs] [5d42b6a2048] functions: add accessor functions for inlined node tree

Jacques Lucke noreply at git.blender.org
Tue Nov 26 17:31:41 CET 2019


Commit: 5d42b6a2048a196b350fb26d4f7dc1b441628fbb
Author: Jacques Lucke
Date:   Tue Nov 26 13:30:10 2019 +0100
Branches: functions
https://developer.blender.org/rB5d42b6a2048a196b350fb26d4f7dc1b441628fbb

add accessor functions for inlined node tree

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

M	source/blender/blenkernel/BKE_inlined_node_tree.h
M	source/blender/blenkernel/intern/inlined_node_tree.cc
M	source/blender/blenlib/BLI_vector.h

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

diff --git a/source/blender/blenkernel/BKE_inlined_node_tree.h b/source/blender/blenkernel/BKE_inlined_node_tree.h
index d93ea5b8e29..5642132c1f7 100644
--- a/source/blender/blenkernel/BKE_inlined_node_tree.h
+++ b/source/blender/blenkernel/BKE_inlined_node_tree.h
@@ -37,6 +37,11 @@ class XInputSocket : public XSocket {
   Vector<XGroupInput *> m_linked_group_inputs;
 
   friend InlinedNodeTree;
+
+ public:
+  const VInputSocket &vsocket() const;
+  ArrayRef<const XOutputSocket *> linked_sockets() const;
+  ArrayRef<const XGroupInput *> linked_group_inputs() const;
 };
 
 class XOutputSocket : public XSocket {
@@ -45,6 +50,10 @@ class XOutputSocket : public XSocket {
   Vector<XInputSocket *> m_linked_sockets;
 
   friend InlinedNodeTree;
+
+ public:
+  const VOutputSocket &vsocket() const;
+  ArrayRef<const XInputSocket *> linked_sockets() const;
 };
 
 class XGroupInput : BLI::NonCopyable, BLI::NonMovable {
@@ -54,6 +63,11 @@ class XGroupInput : BLI::NonCopyable, BLI::NonMovable {
   Vector<XInputSocket *> m_linked_sockets;
 
   friend InlinedNodeTree;
+
+ public:
+  const VInputSocket &vsocket() const;
+  const XParentNode *parent() const;
+  ArrayRef<const XInputSocket *> linked_sockets() const;
 };
 
 class XNode : BLI::NonCopyable, BLI::NonMovable {
@@ -65,6 +79,16 @@ class XNode : BLI::NonCopyable, BLI::NonMovable {
   Vector<XOutputSocket *> m_outputs;
 
   friend InlinedNodeTree;
+
+ public:
+  const VNode &vnode() const;
+  const XParentNode *parent() const;
+
+  ArrayRef<const XInputSocket *> inputs() const;
+  ArrayRef<const XOutputSocket *> outputs() const;
+
+  const XInputSocket &input(uint index) const;
+  const XOutputSocket &output(uint index) const;
 };
 
 class XParentNode : BLI::NonCopyable, BLI::NonMovable {
@@ -75,15 +99,8 @@ class XParentNode : BLI::NonCopyable, BLI::NonMovable {
   friend InlinedNodeTree;
 
  public:
-  const XParentNode *parent() const
-  {
-    return m_parent;
-  }
-
-  const VNode &vnode() const
-  {
-    return *m_vnode;
-  }
+  const XParentNode *parent() const;
+  const VNode &vnode() const;
 };
 
 using BTreeVTreeMap = Map<bNodeTree *, std::unique_ptr<const VirtualNodeTree>>;
@@ -115,11 +132,91 @@ class InlinedNodeTree : BLI::NonCopyable, BLI::NonMovable {
 /* Inline functions
  ********************************************/
 
+inline const VNode &XNode::vnode() const
+{
+  return *m_vnode;
+}
+
+inline const XParentNode *XNode::parent() const
+{
+  return m_parent;
+}
+
+inline ArrayRef<const XInputSocket *> XNode::inputs() const
+{
+  return m_inputs.as_ref();
+}
+
+inline ArrayRef<const XOutputSocket *> XNode::outputs() const
+{
+  return m_outputs.as_ref();
+}
+
+inline const XInputSocket &XNode::input(uint index) const
+{
+  return *m_inputs[index];
+}
+
+inline const XOutputSocket &XNode::output(uint index) const
+{
+  return *m_outputs[index];
+}
+
+inline const XParentNode *XParentNode::parent() const
+{
+  return m_parent;
+}
+
+inline const VNode &XParentNode::vnode() const
+{
+  return *m_vnode;
+}
+
 inline const XNode &XSocket::node() const
 {
   return *m_node;
 }
 
+inline const VInputSocket &XInputSocket::vsocket() const
+{
+  return *m_vsocket;
+}
+
+inline ArrayRef<const XOutputSocket *> XInputSocket::linked_sockets() const
+{
+  return m_linked_sockets.as_ref();
+}
+
+inline ArrayRef<const XGroupInput *> XInputSocket::linked_group_inputs() const
+{
+  return m_linked_group_inputs.as_ref();
+}
+
+inline const VOutputSocket &XOutputSocket::vsocket() const
+{
+  return *m_vsocket;
+}
+
+inline ArrayRef<const XInputSocket *> XOutputSocket::linked_sockets() const
+{
+  return m_linked_sockets.as_ref();
+}
+
+inline const VInputSocket &XGroupInput::vsocket() const
+{
+  return *m_vsocket;
+}
+
+inline const XParentNode *XGroupInput::parent() const
+{
+  return m_parent;
+}
+
+inline ArrayRef<const XInputSocket *> XGroupInput::linked_sockets() const
+{
+  return m_linked_sockets.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 3b98c814482..9c6a6ea22aa 100644
--- a/source/blender/blenkernel/intern/inlined_node_tree.cc
+++ b/source/blender/blenkernel/intern/inlined_node_tree.cc
@@ -301,24 +301,24 @@ std::string InlinedNodeTree::to_dot() const
     auto &dot_node = digraph.new_node("");
 
     Vector<std::string> input_names;
-    for (const XInputSocket *input : xnode->m_inputs) {
+    for (const XInputSocket *input : xnode->inputs()) {
       input_names.append(input->m_vsocket->name());
     }
     Vector<std::string> output_names;
-    for (const XOutputSocket *output : xnode->m_outputs) {
+    for (const XOutputSocket *output : xnode->outputs()) {
       output_names.append(output->m_vsocket->name());
     }
 
     dot_nodes.add_new(xnode,
                       BLI::DotExport::Utils::NodeWithSocketsWrapper(
-                          dot_node, xnode->m_vnode->name(), input_names, output_names));
+                          dot_node, xnode->vnode().name(), input_names, output_names));
 
     BLI::DotExport::Cluster *cluster = get_cluster_for_parent(
-        digraph, dot_clusters, xnode->m_parent);
+        digraph, dot_clusters, xnode->parent());
     dot_node.set_parent_cluster(cluster);
 
-    for (const XInputSocket *input : xnode->m_inputs) {
-      for (const XGroupInput *group_input : input->m_linked_group_inputs) {
+    for (const XInputSocket *input : xnode->inputs()) {
+      for (const XGroupInput *group_input : input->linked_group_inputs()) {
         if (!dot_group_inputs.contains(group_input)) {
           auto &dot_group_input_node = digraph.new_node("");
           dot_group_inputs.add_new(group_input,
@@ -326,7 +326,7 @@ std::string InlinedNodeTree::to_dot() const
                                        dot_group_input_node, "Group Input", {}, {"Value"}));
 
           BLI::DotExport::Cluster *cluster = get_cluster_for_parent(
-              digraph, dot_clusters, group_input->m_parent);
+              digraph, dot_clusters, group_input->parent());
           dot_group_input_node.set_parent_cluster(cluster);
         }
       }
@@ -336,20 +336,20 @@ std::string InlinedNodeTree::to_dot() const
   for (const XNode *to_xnode : m_node_by_id) {
     auto to_dot_node = dot_nodes.lookup(to_xnode);
 
-    for (const XInputSocket *to_xsocket : to_xnode->m_inputs) {
-      for (const XOutputSocket *from_xsocket : to_xsocket->m_linked_sockets) {
-        const XNode *from_xnode = from_xsocket->m_node;
+    for (const XInputSocket *to_xsocket : to_xnode->inputs()) {
+      for (const XOutputSocket *from_xsocket : to_xsocket->linked_sockets()) {
+        const XNode *from_xnode = &from_xsocket->node();
 
         auto from_dot_node = dot_nodes.lookup(from_xnode);
 
-        digraph.new_edge(from_dot_node.output(from_xsocket->m_vsocket->index()),
-                         to_dot_node.input(to_xsocket->m_vsocket->index()));
+        digraph.new_edge(from_dot_node.output(from_xsocket->vsocket().index()),
+                         to_dot_node.input(to_xsocket->vsocket().index()));
       }
-      for (const XGroupInput *group_input : to_xsocket->m_linked_group_inputs) {
+      for (const XGroupInput *group_input : to_xsocket->linked_group_inputs()) {
         auto from_dot_node = dot_group_inputs.lookup(group_input);
 
         digraph.new_edge(from_dot_node.output(0),
-                         to_dot_node.input(to_xsocket->m_vsocket->index()));
+                         to_dot_node.input(to_xsocket->vsocket().index()));
       }
     }
   }
diff --git a/source/blender/blenlib/BLI_vector.h b/source/blender/blenlib/BLI_vector.h
index d07a4e0dc82..d26a2a728b0 100644
--- a/source/blender/blenlib/BLI_vector.h
+++ b/source/blender/blenlib/BLI_vector.h
@@ -215,6 +215,11 @@ template<typename T, uint N = 4, typename Allocator = GuardedAllocator> class Ve
     return MutableArrayRef<T>(m_begin, this->size());
   }
 
+  ArrayRef<T> as_ref() const
+  {
+    return *this;
+  }
+
   Vector &operator=(const Vector &other)
   {
     if (this == &other) {



More information about the Bf-blender-cvs mailing list