diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-06-10 02:41:34 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-06-10 02:46:18 +0900 |
| commit | 2d474e91e49c7343d28198eff2b5bbbed9afbcee (patch) | |
| tree | 8c1ab321dfa5ddc1ca9d2871eb06a6fde6b2970b /crates/shirabe/src/dependency_resolver/decisions.rs | |
| parent | e583112899cbea7494ffdd73d7de380dd5f808c4 (diff) | |
| download | php-shirabe-2d474e91e49c7343d28198eff2b5bbbed9afbcee.tar.gz php-shirabe-2d474e91e49c7343d28198eff2b5bbbed9afbcee.tar.zst php-shirabe-2d474e91e49c7343d28198eff2b5bbbed9afbcee.zip | |
feat(phase-c): resolve cross-module phase-b TODOs
Diffstat (limited to 'crates/shirabe/src/dependency_resolver/decisions.rs')
| -rw-r--r-- | crates/shirabe/src/dependency_resolver/decisions.rs | 34 |
1 files changed, 5 insertions, 29 deletions
diff --git a/crates/shirabe/src/dependency_resolver/decisions.rs b/crates/shirabe/src/dependency_resolver/decisions.rs index 3b82883..81f0088 100644 --- a/crates/shirabe/src/dependency_resolver/decisions.rs +++ b/crates/shirabe/src/dependency_resolver/decisions.rs @@ -11,7 +11,6 @@ pub struct Decisions { pub(crate) pool: std::rc::Rc<std::cell::RefCell<Pool>>, pub(crate) decision_map: IndexMap<i64, i64>, pub(crate) decision_queue: Vec<(i64, std::rc::Rc<std::cell::RefCell<Rule>>)>, - iterator_cursor: Option<usize>, } impl std::fmt::Debug for Decisions { @@ -32,7 +31,6 @@ impl Decisions { pool, decision_map: IndexMap::new(), decision_queue: Vec::new(), - iterator_cursor: None, } } @@ -154,33 +152,6 @@ impl Decisions { self.decision_queue.len() } - pub fn rewind(&mut self) { - if self.decision_queue.is_empty() { - self.iterator_cursor = None; - } else { - self.iterator_cursor = Some(self.decision_queue.len() - 1); - } - } - - pub fn current(&self) -> Option<&(i64, std::rc::Rc<std::cell::RefCell<Rule>>)> { - self.iterator_cursor - .and_then(|cursor| self.decision_queue.get(cursor)) - } - - pub fn key(&self) -> Option<usize> { - self.iterator_cursor - } - - pub fn next(&mut self) { - self.iterator_cursor = self - .iterator_cursor - .and_then(|cursor| if cursor > 0 { Some(cursor - 1) } else { None }); - } - - pub fn valid(&self) -> bool { - self.iterator_cursor.is_some() && self.current().is_some() - } - pub fn is_empty(&self) -> bool { self.decision_queue.is_empty() } @@ -227,6 +198,11 @@ impl Decisions { str } + + // Reverse iteration: newest-first. + pub fn iter(&self) -> impl Iterator<Item = &(i64, std::rc::Rc<std::cell::RefCell<Rule>>)> { + self.decision_queue.iter().rev() + } } impl fmt::Display for Decisions { |
