diff options
author | Jacques Lucke <jacques@blender.org> | 2020-04-28 18:53:09 +0300 |
---|---|---|
committer | Jacques Lucke <jacques@blender.org> | 2020-04-28 18:53:09 +0300 |
commit | 67bd6bbcdd0347d078b902ebe9e59692d602b5b1 (patch) | |
tree | d1c66265aa08aa49d8d6998fb8782551624a4301 /source/blender/depsgraph/intern/builder/deg_builder_transitive.cc | |
parent | 05283f8c96c08c34979eaecf4ce4f5b3021c0264 (diff) |
Depsgraph: use BLI::Vector for Relations
Reviewers: sergey
Differential Revision: https://developer.blender.org/D7556
Diffstat (limited to 'source/blender/depsgraph/intern/builder/deg_builder_transitive.cc')
-rw-r--r-- | source/blender/depsgraph/intern/builder/deg_builder_transitive.cc | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_transitive.cc b/source/blender/depsgraph/intern/builder/deg_builder_transitive.cc index 3f828ef5bb0..22ceac899b8 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_transitive.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_transitive.cc @@ -72,6 +72,8 @@ static void deg_graph_tag_paths_recursive(Node *node) void deg_graph_transitive_reduction(Depsgraph *graph) { int num_removed_relations = 0; + Vector<Relation *> relations_to_remove; + for (OperationNode *target : graph->operations) { /* Clear tags. */ for (OperationNode *node : graph->operations) { @@ -85,25 +87,24 @@ void deg_graph_transitive_reduction(Depsgraph *graph) deg_graph_tag_paths_recursive(rel->from); } /* Remove redundant paths to the target. */ - for (Node::Relations::const_iterator it_rel = target->inlinks.begin(); - it_rel != target->inlinks.end();) { - Relation *rel = *it_rel; + for (Relation *rel : target->inlinks) { if (rel->from->type == NodeType::TIMESOURCE) { /* HACK: time source nodes don't get "custom_flags" flag * set/cleared. */ /* TODO: there will be other types in future, so iterators above * need modifying. */ - ++it_rel; + continue; } else if (rel->from->custom_flags & OP_REACHABLE) { - rel->unlink(); - OBJECT_GUARDED_DELETE(rel, Relation); - num_removed_relations++; - } - else { - ++it_rel; + relations_to_remove.append(rel); } } + for (Relation *rel : relations_to_remove) { + rel->unlink(); + OBJECT_GUARDED_DELETE(rel, Relation); + } + num_removed_relations += relations_to_remove.size(); + relations_to_remove.clear(); } DEG_DEBUG_PRINTF((::Depsgraph *)graph, BUILD, "Removed %d relations\n", num_removed_relations); } |