diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-05-22 04:19:14 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-05-22 04:19:25 +0900 |
| commit | 2a1696906344cb4da768a940bf8b1f89bbc82b47 (patch) | |
| tree | 9e37f93baaa9858037ab3a25b13a676f07ccb3a9 /crates/shirabe/src/dependency_resolver/rule_set_generator.rs | |
| parent | 6739da8a8e271a82d1bf8ca79bba58640ae6e743 (diff) | |
| download | php-shirabe-2a1696906344cb4da768a940bf8b1f89bbc82b47.tar.gz php-shirabe-2a1696906344cb4da768a940bf8b1f89bbc82b47.tar.zst php-shirabe-2a1696906344cb4da768a940bf8b1f89bbc82b47.zip | |
refactor: share Pool via Rc<RefCell>
Convert Pool to Rc<RefCell<Pool>> so Solver, Decisions, and
RuleSetGenerator share it, resolving the todo!() placeholders that
blocked the dependency resolver (Phase C shared ownership).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe/src/dependency_resolver/rule_set_generator.rs')
| -rw-r--r-- | crates/shirabe/src/dependency_resolver/rule_set_generator.rs | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/crates/shirabe/src/dependency_resolver/rule_set_generator.rs b/crates/shirabe/src/dependency_resolver/rule_set_generator.rs index 57d1d18..2d99d7f 100644 --- a/crates/shirabe/src/dependency_resolver/rule_set_generator.rs +++ b/crates/shirabe/src/dependency_resolver/rule_set_generator.rs @@ -24,14 +24,17 @@ use crate::package::PackageInterface; #[derive(Debug)] pub struct RuleSetGenerator { pub(crate) policy: Box<dyn PolicyInterface>, - pub(crate) pool: Pool, + pub(crate) pool: std::rc::Rc<std::cell::RefCell<Pool>>, pub(crate) rules: RuleSet, pub(crate) added_map: IndexMap<i64, Box<dyn PackageInterface>>, pub(crate) added_packages_by_names: IndexMap<String, Vec<Box<dyn PackageInterface>>>, } impl RuleSetGenerator { - pub fn new(policy: Box<dyn PolicyInterface>, pool: Pool) -> Self { + pub fn new( + policy: Box<dyn PolicyInterface>, + pool: std::rc::Rc<std::cell::RefCell<Pool>>, + ) -> Self { Self { policy, pool, @@ -221,6 +224,7 @@ impl RuleSetGenerator { let possible_requires: Vec<Box<dyn PackageInterface>> = self .pool + .borrow_mut() .what_provides(link.get_target(), Some(&*constraint)) .into_iter() .map(|p| p.clone_package_box()) @@ -276,6 +280,7 @@ impl RuleSetGenerator { let conflicts = self .pool + .borrow_mut() .what_provides(link.get_target(), Some(&*constraint)); for conflict in &conflicts { @@ -327,6 +332,7 @@ impl RuleSetGenerator { // fixed package was not added to the pool as it did not pass the stability requirements, this is fine if self .pool + .borrow() .is_unacceptable_fixed_or_locked_package(package.as_ref()) { continue; @@ -373,6 +379,7 @@ impl RuleSetGenerator { let packages: Vec<Box<dyn PackageInterface>> = self .pool + .borrow_mut() .what_provides(package_name, Some(&*constraint)) .into_iter() .map(|p| p.clone_package_box()) @@ -412,6 +419,7 @@ impl RuleSetGenerator { ) { let packages: Vec<Box<dyn BasePackage>> = self .pool + .borrow() .get_packages() .iter() .map(|p| p.clone_box()) |
