From 4ce8684aa6e156fea979ff9ab4336603a29d8ac2 Mon Sep 17 00:00:00 2001 From: Jacob Finkelman Date: Tue, 19 Nov 2024 17:56:44 +0000 Subject: [PATCH] only allocate the start term if it's needed --- src/internal/partial_solution.rs | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/internal/partial_solution.rs b/src/internal/partial_solution.rs index 121f80e5..c46b83d8 100644 --- a/src/internal/partial_solution.rs +++ b/src/internal/partial_solution.rs @@ -485,15 +485,15 @@ impl PartialSolution { .get(satisfier_package) .expect("satisfier package not in incompat"); - let start_term = accum_term.intersection(&incompat_term.negate()); - let out = satisfier_pa.satisfier(satisfier_package, &start_term); - satisfied_map.insert( satisfier_package, if accum_term.subset_of(incompat_term) { (None, 0, DecisionLevel(1)) } else { - out + satisfier_pa.satisfier( + satisfier_package, + &accum_term.intersection(&incompat_term.negate()), + ) }, ); @@ -516,14 +516,16 @@ impl PackageAssignm package: &P, start_term: &Term, ) -> (Option>, u32, DecisionLevel) { - let empty = Term::empty(); // Indicate if we found a satisfier in the list of derivations, otherwise it will be the decision. let idx = self .dated_derivations .as_slice() .partition_point(|dd| !dd.accumulated_intersection.is_disjoint(start_term)); if let Some(dd) = self.dated_derivations.get(idx) { - debug_assert_eq!(dd.accumulated_intersection.intersection(start_term), empty); + debug_assert_eq!( + dd.accumulated_intersection.intersection(start_term), + Term::empty() + ); return (Some(dd.cause), dd.global_index, dd.decision_level); } // If it wasn't found in the derivations,