Skip to content

Commit

Permalink
Change the container which was used for keeping navigating goals from…
Browse files Browse the repository at this point in the history
… std::vector into std::deque as it was being practically used as a queue before(FIFO), but removing the first element in a vector is costly as all elements needs to be pushed forward.

This change practically shouldn't have big improvements but helps readability.

PiperOrigin-RevId: 703479151
  • Loading branch information
h-joo authored and copybara-github committed Dec 6, 2024
1 parent 720d393 commit 2208eef
Showing 1 changed file with 9 additions and 9 deletions.
18 changes: 9 additions & 9 deletions pytype/typegraph/solver.cc
Original file line number Diff line number Diff line change
Expand Up @@ -54,13 +54,13 @@ static std::vector<RemoveResult> remove_finished_goals(const CFGNode* pos,
goals_to_remove.begin(), goals_to_remove.end(),
std::inserter(new_goals, new_goals.begin()),
pointer_less<Binding>());
std::vector<std::tuple<GoalSet, GoalSet, GoalSet, GoalSet>> stack;
stack.emplace_back(goals_to_remove, seen_goals, removed_goals, new_goals);
std::deque<std::tuple<GoalSet, GoalSet, GoalSet, GoalSet>> deque;
deque.emplace_back(goals_to_remove, seen_goals, removed_goals, new_goals);
std::vector<RemoveResult> results;
while (!stack.empty()) {
std::tie(
goals_to_remove, seen_goals, removed_goals, new_goals) = *stack.begin();
stack.erase(stack.begin());
while (!deque.empty()) {
std::tie(goals_to_remove, seen_goals, removed_goals, new_goals) =
deque.front();
deque.pop_front();
if (goals_to_remove.empty()) {
results.push_back(RemoveResult(removed_goals, new_goals));
continue;
Expand All @@ -69,21 +69,21 @@ static std::vector<RemoveResult> remove_finished_goals(const CFGNode* pos,
goals_to_remove.erase(goals_to_remove.begin());
if (seen_goals.count(goal)) {
// Only process a goal once, to prevent infinite loops.
stack.emplace_back(goals_to_remove, seen_goals, removed_goals, new_goals);
deque.emplace_back(goals_to_remove, seen_goals, removed_goals, new_goals);
continue;
}
seen_goals.insert(goal);
const auto* origin = goal->FindOrigin(pos);
if (!origin) {
new_goals.insert(goal);
stack.emplace_back(goals_to_remove, seen_goals, removed_goals, new_goals);
deque.emplace_back(goals_to_remove, seen_goals, removed_goals, new_goals);
continue;
}
removed_goals.insert(goal);
for (const auto& source_set : origin->source_sets) {
GoalSet next_goals_to_remove(goals_to_remove);
next_goals_to_remove.insert(source_set.begin(), source_set.end());
stack.emplace_back(std::move(next_goals_to_remove), seen_goals,
deque.emplace_back(std::move(next_goals_to_remove), seen_goals,
removed_goals, new_goals);
}
}
Expand Down

0 comments on commit 2208eef

Please sign in to comment.