Skip to content

Commit b70a960

Browse files
committed
Add PartialSolution::prioritized_packages
1 parent 684d560 commit b70a960

File tree

1 file changed

+19
-0
lines changed

1 file changed

+19
-0
lines changed

src/internal/partial_solution.rs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,25 @@ impl<DP: DependencyProvider> PartialSolution<DP> {
265265
}
266266
}
267267

268+
#[cold]
269+
pub fn prioritized_packages(&self) -> impl Iterator<Item = (Id<DP::P>, &DP::VS)> {
270+
let check_all = self.changed_this_decision_level
271+
== self.current_decision_level.0.saturating_sub(1) as usize;
272+
let current_decision_level = self.current_decision_level;
273+
self.package_assignments
274+
.get_range(self.changed_this_decision_level..)
275+
.unwrap()
276+
.iter()
277+
.filter(move |(_, pa)| {
278+
// We only actually need to update the package if its Been changed
279+
// since the last time we called prioritize.
280+
// Which means it's highest decision level is the current decision level,
281+
// or if we backtracked in the mean time.
282+
check_all || pa.highest_decision_level == current_decision_level
283+
})
284+
.filter_map(|(&p, pa)| pa.assignments_intersection.potential_package_filter(p))
285+
}
286+
268287
#[cold]
269288
pub fn pick_highest_priority_pkg(
270289
&mut self,

0 commit comments

Comments
 (0)