Skip to content

Commit bd18f70

Browse files
committed
Add PartialSolution::prioritized_packages
1 parent 3d68e58 commit bd18f70

File tree

1 file changed

+18
-0
lines changed

1 file changed

+18
-0
lines changed

src/internal/partial_solution.rs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,24 @@ impl<DP: DependencyProvider> PartialSolution<DP> {
254254
}
255255
}
256256

257+
pub fn prioritized_packages(&self) -> impl Iterator<Item = (&DP::P, &DP::VS)> {
258+
let check_all = self.changed_this_decision_level
259+
== self.current_decision_level.0.saturating_sub(1) as usize;
260+
let current_decision_level = self.current_decision_level;
261+
self.package_assignments
262+
.get_range(self.changed_this_decision_level..)
263+
.unwrap()
264+
.iter()
265+
.filter(move |(_, pa)| {
266+
// We only actually need to update the package if its Been changed
267+
// since the last time we called prioritize.
268+
// Which means it's highest decision level is the current decision level,
269+
// or if we backtracked in the mean time.
270+
check_all || pa.highest_decision_level == current_decision_level
271+
})
272+
.filter_map(|(p, pa)| pa.assignments_intersection.potential_package_filter(p))
273+
}
274+
257275
pub fn pick_highest_priority_pkg(
258276
&mut self,
259277
prioritizer: impl Fn(&DP::P, &DP::VS) -> DP::Priority,

0 commit comments

Comments
 (0)