aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/dependency_resolver/rule_watch_chain.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/shirabe/src/dependency_resolver/rule_watch_chain.rs')
-rw-r--r--crates/shirabe/src/dependency_resolver/rule_watch_chain.rs19
1 files changed, 16 insertions, 3 deletions
diff --git a/crates/shirabe/src/dependency_resolver/rule_watch_chain.rs b/crates/shirabe/src/dependency_resolver/rule_watch_chain.rs
index 3d04f1c..3355b29 100644
--- a/crates/shirabe/src/dependency_resolver/rule_watch_chain.rs
+++ b/crates/shirabe/src/dependency_resolver/rule_watch_chain.rs
@@ -3,8 +3,9 @@
use crate::dependency_resolver::rule_watch_node::RuleWatchNode;
/// An extension of SplDoublyLinkedList with seek and removal of current element.
+#[derive(Debug)]
pub struct RuleWatchChain {
- data: Vec<RuleWatchNode>,
+ data: Vec<std::rc::Rc<std::cell::RefCell<RuleWatchNode>>>,
current_offset: usize,
}
@@ -16,14 +17,26 @@ impl RuleWatchChain {
}
}
- fn rewind(&mut self) {
+ pub(crate) fn rewind(&mut self) {
self.current_offset = 0;
}
- fn next(&mut self) {
+ pub(crate) fn next(&mut self) {
self.current_offset += 1;
}
+ pub(crate) fn valid(&self) -> bool {
+ self.current_offset < self.data.len()
+ }
+
+ pub(crate) fn current(&self) -> &std::rc::Rc<std::cell::RefCell<RuleWatchNode>> {
+ &self.data[self.current_offset]
+ }
+
+ pub(crate) fn unshift(&mut self, node: std::rc::Rc<std::cell::RefCell<RuleWatchNode>>) {
+ self.data.insert(0, node);
+ }
+
fn key(&self) -> usize {
self.current_offset
}