[Bf-blender-cvs] [2155bdd500f] master: Cleanup: Remove "done" variable from node runtime
Hans Goudey
noreply at git.blender.org
Fri Dec 2 21:20:20 CET 2022
Commit: 2155bdd500fd087f372b2240d992085cb9dd7090
Author: Hans Goudey
Date: Fri Dec 2 14:14:14 2022 -0600
Branches: master
https://developer.blender.org/rB2155bdd500fd087f372b2240d992085cb9dd7090
Cleanup: Remove "done" variable from node runtime
The runtime storage is meant for more persistent things. These local
states for an algorithm are much better handled by an array now.
===================================================================
M source/blender/blenkernel/BKE_node_runtime.hh
M source/blender/editors/space_node/node_relationships.cc
M source/blender/functions/intern/field.cc
===================================================================
diff --git a/source/blender/blenkernel/BKE_node_runtime.hh b/source/blender/blenkernel/BKE_node_runtime.hh
index a2241557315..09722b46fc1 100644
--- a/source/blender/blenkernel/BKE_node_runtime.hh
+++ b/source/blender/blenkernel/BKE_node_runtime.hh
@@ -212,9 +212,6 @@ class bNodeRuntime : NonCopyable, NonMovable {
/** #eNodeTreeChangedFlag. */
uint32_t changed_flag = 0;
- /** For dependency and sorting. */
- short done = 0;
-
/** Used as a boolean for execution. */
uint8_t need_exec = 0;
diff --git a/source/blender/editors/space_node/node_relationships.cc b/source/blender/editors/space_node/node_relationships.cc
index 50be528bbe6..93761388f43 100644
--- a/source/blender/editors/space_node/node_relationships.cc
+++ b/source/blender/editors/space_node/node_relationships.cc
@@ -1630,40 +1630,42 @@ void NODE_OT_parent_set(wmOperatorType *ot)
/** \name Join Nodes Operator
* \{ */
-/* tags for depth-first search */
-#define NODE_JOIN_DONE 1
-#define NODE_JOIN_IS_DESCENDANT 2
+struct NodeJoinState {
+ bool done;
+ bool descendent;
+};
static void node_join_attach_recursive(bNodeTree &ntree,
+ MutableSpan<NodeJoinState> join_states,
bNode *node,
bNode *frame,
const VectorSet<bNode *> &selected_nodes)
{
- node->runtime->done |= NODE_JOIN_DONE;
+ join_states[node->runtime->index_in_tree].done = true;
if (node == frame) {
- node->runtime->done |= NODE_JOIN_IS_DESCENDANT;
+ join_states[node->runtime->index_in_tree].descendent = true;
}
else if (node->parent) {
/* call recursively */
- if (!(node->parent->runtime->done & NODE_JOIN_DONE)) {
- node_join_attach_recursive(ntree, node->parent, frame, selected_nodes);
+ if (!join_states[node->parent->runtime->index_in_tree].done) {
+ node_join_attach_recursive(ntree, join_states, node->parent, frame, selected_nodes);
}
/* in any case: if the parent is a descendant, so is the child */
- if (node->parent->runtime->done & NODE_JOIN_IS_DESCENDANT) {
- node->runtime->done |= NODE_JOIN_IS_DESCENDANT;
+ if (join_states[node->parent->runtime->index_in_tree].descendent) {
+ join_states[node->runtime->index_in_tree].descendent = true;
}
else if (selected_nodes.contains(node)) {
/* if parent is not an descendant of the frame, reattach the node */
nodeDetachNode(&ntree, node);
nodeAttachNode(&ntree, node, frame);
- node->runtime->done |= NODE_JOIN_IS_DESCENDANT;
+ join_states[node->runtime->index_in_tree].descendent = true;
}
}
else if (selected_nodes.contains(node)) {
nodeAttachNode(&ntree, node, frame);
- node->runtime->done |= NODE_JOIN_IS_DESCENDANT;
+ join_states[node->runtime->index_in_tree].descendent = true;
}
}
@@ -1678,14 +1680,11 @@ static int node_join_exec(bContext *C, wmOperator * /*op*/)
bNode *frame_node = nodeAddStaticNode(C, &ntree, NODE_FRAME);
nodeSetActive(&ntree, frame_node);
- /* reset tags */
- for (bNode *node : ntree.all_nodes()) {
- node->runtime->done = 0;
- }
+ Array<NodeJoinState> join_states(ntree.all_nodes().size(), NodeJoinState{false, false});
for (bNode *node : ntree.all_nodes()) {
- if (!(node->runtime->done & NODE_JOIN_DONE)) {
- node_join_attach_recursive(ntree, node, frame_node, selected_nodes);
+ if (!join_states[node->runtime->index_in_tree].done) {
+ node_join_attach_recursive(ntree, join_states, node, frame_node, selected_nodes);
}
}
@@ -1808,32 +1807,35 @@ void NODE_OT_attach(wmOperatorType *ot)
/** \name Detach Operator
* \{ */
-/* tags for depth-first search */
-#define NODE_DETACH_DONE 1
-#define NODE_DETACH_IS_DESCENDANT 2
+struct NodeDetachstate {
+ bool done;
+ bool descendent;
+};
-static void node_detach_recursive(bNodeTree &ntree, bNode *node)
+static void node_detach_recursive(bNodeTree &ntree,
+ MutableSpan<NodeDetachstate> detach_states,
+ bNode *node)
{
- node->runtime->done |= NODE_DETACH_DONE;
+ detach_states[node->runtime->index_in_tree].done = true;
if (node->parent) {
/* call recursively */
- if (!(node->parent->runtime->done & NODE_DETACH_DONE)) {
- node_detach_recursive(ntree, node->parent);
+ if (!detach_states[node->parent->runtime->index_in_tree].done) {
+ node_detach_recursive(ntree, detach_states, node->parent);
}
/* in any case: if the parent is a descendant, so is the child */
- if (node->parent->runtime->done & NODE_DETACH_IS_DESCENDANT) {
- node->runtime->done |= NODE_DETACH_IS_DESCENDANT;
+ if (detach_states[node->parent->runtime->index_in_tree].descendent) {
+ detach_states[node->runtime->index_in_tree].descendent = true;
}
else if (node->flag & NODE_SELECT) {
/* if parent is not a descendant of a selected node, detach */
nodeDetachNode(&ntree, node);
- node->runtime->done |= NODE_DETACH_IS_DESCENDANT;
+ detach_states[node->runtime->index_in_tree].descendent = true;
}
}
else if (node->flag & NODE_SELECT) {
- node->runtime->done |= NODE_DETACH_IS_DESCENDANT;
+ detach_states[node->runtime->index_in_tree].descendent = true;
}
}
@@ -1843,16 +1845,14 @@ static int node_detach_exec(bContext *C, wmOperator * /*op*/)
SpaceNode &snode = *CTX_wm_space_node(C);
bNodeTree &ntree = *snode.edittree;
- /* reset tags */
- for (bNode *node : ntree.all_nodes()) {
- node->runtime->done = 0;
- }
+ Array<NodeDetachstate> detach_states(ntree.all_nodes().size(), NodeDetachstate{false, false});
+
/* detach nodes recursively
* relative order is preserved here!
*/
for (bNode *node : ntree.all_nodes()) {
- if (!(node->runtime->done & NODE_DETACH_DONE)) {
- node_detach_recursive(ntree, node);
+ if (!detach_states[node->runtime->index_in_tree].done) {
+ node_detach_recursive(ntree, detach_states, node);
}
}
diff --git a/source/blender/functions/intern/field.cc b/source/blender/functions/intern/field.cc
index 554f1a6f036..754860f2682 100644
--- a/source/blender/functions/intern/field.cc
+++ b/source/blender/functions/intern/field.cc
@@ -469,7 +469,9 @@ Vector<GVArray> evaluate_fields(ResourceScope &scope,
}
/* Still have to copy over the data in the destination provided by the caller. */
if (dst_varray.is_span()) {
- array_utils::copy(computed_varray, mask, dst_varray.get_internal_span());
+ array_utils::copy(computed_varray,
+ mask,
+ dst_varray.get_internal_span().take_front(mask.min_array_size()));
}
else {
/* Slower materialize into a different structure. */
More information about the Bf-blender-cvs
mailing list