aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/dependency_resolver/decisions.rs
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-06-10 02:41:34 +0900
committernsfisis <nsfisis@gmail.com>2026-06-10 02:46:18 +0900
commit2d474e91e49c7343d28198eff2b5bbbed9afbcee (patch)
tree8c1ab321dfa5ddc1ca9d2871eb06a6fde6b2970b /crates/shirabe/src/dependency_resolver/decisions.rs
parente583112899cbea7494ffdd73d7de380dd5f808c4 (diff)
downloadphp-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.rs34
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 {