[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