Cleanup: Fix const correctness of node tree interface cache API

It shouldn't be possible to retrieve a mutable interface item from
a const node tree. Unfortunately that means we have to duplicate
the accessor methods. Fortunately they are very small.
This commit is contained in:
Hans Goudey
2023-10-20 19:37:39 +02:00
parent 7b09983423
commit 8c0fc33739
3 changed files with 28 additions and 7 deletions

View File

@@ -553,19 +553,37 @@ inline void bNodeTree::ensure_interface_cache() const
this->tree_interface.ensure_items_cache();
}
inline blender::Span<bNodeTreeInterfaceSocket *> bNodeTree::interface_inputs() const
inline blender::Span<bNodeTreeInterfaceSocket *> bNodeTree::interface_inputs()
{
BLI_assert(this->tree_interface.items_cache_is_available());
return this->tree_interface.runtime->inputs_;
}
inline blender::Span<bNodeTreeInterfaceSocket *> bNodeTree::interface_outputs() const
inline blender::Span<const bNodeTreeInterfaceSocket *> bNodeTree::interface_inputs() const
{
BLI_assert(this->tree_interface.items_cache_is_available());
return this->tree_interface.runtime->inputs_;
}
inline blender::Span<bNodeTreeInterfaceSocket *> bNodeTree::interface_outputs()
{
BLI_assert(this->tree_interface.items_cache_is_available());
return this->tree_interface.runtime->outputs_;
}
inline blender::Span<bNodeTreeInterfaceItem *> bNodeTree::interface_items() const
inline blender::Span<const bNodeTreeInterfaceSocket *> bNodeTree::interface_outputs() const
{
BLI_assert(this->tree_interface.items_cache_is_available());
return this->tree_interface.runtime->outputs_;
}
inline blender::Span<bNodeTreeInterfaceItem *> bNodeTree::interface_items()
{
BLI_assert(this->tree_interface.items_cache_is_available());
return this->tree_interface.runtime->items_;
}
inline blender::Span<const bNodeTreeInterfaceItem *> bNodeTree::interface_items() const
{
BLI_assert(this->tree_interface.items_cache_is_available());
return this->tree_interface.runtime->items_;

View File

@@ -450,7 +450,7 @@ static void run_node_group_ui(bContext *C, wmOperator *op)
node_tree->ensure_interface_cache();
int input_index = 0;
for (bNodeTreeInterfaceSocket *io_socket : node_tree->interface_inputs()) {
for (const bNodeTreeInterfaceSocket *io_socket : node_tree->interface_inputs()) {
draw_property_for_socket(
*node_tree, layout, op->properties, &bmain_ptr, op->ptr, *io_socket, input_index);
++input_index;

View File

@@ -788,9 +788,12 @@ typedef struct bNodeTree {
void ensure_interface_cache() const;
/* Cached interface item lists. */
blender::Span<bNodeTreeInterfaceSocket *> interface_inputs() const;
blender::Span<bNodeTreeInterfaceSocket *> interface_outputs() const;
blender::Span<bNodeTreeInterfaceItem *> interface_items() const;
blender::Span<bNodeTreeInterfaceSocket *> interface_inputs();
blender::Span<const bNodeTreeInterfaceSocket *> interface_inputs() const;
blender::Span<bNodeTreeInterfaceSocket *> interface_outputs();
blender::Span<const bNodeTreeInterfaceSocket *> interface_outputs() const;
blender::Span<bNodeTreeInterfaceItem *> interface_items();
blender::Span<const bNodeTreeInterfaceItem *> interface_items() const;
#endif
} bNodeTree;