diff --git a/brood/src/commands/longest_shortest_path.rs b/brood/src/commands/longest_shortest_path.rs index 1899529..c3de973 100644 --- a/brood/src/commands/longest_shortest_path.rs +++ b/brood/src/commands/longest_shortest_path.rs @@ -18,7 +18,7 @@ impl DijkstraPageInfo { fn from_page_info(info: PageInfo) -> Self { Self { cost: u32::MAX, - prev: PageIdx(u32::MAX), + prev: PageIdx::MAX, redirect: info.redirect, } } @@ -131,7 +131,7 @@ fn find_longest_shortest_path( loop { steps.push(at); at = data.page(at).data.prev; - if at == PageIdx(u32::MAX) { + if at == PageIdx::MAX { break; }; } diff --git a/brood/src/commands/path.rs b/brood/src/commands/path.rs index 3ecb411..3d8d50d 100644 --- a/brood/src/commands/path.rs +++ b/brood/src/commands/path.rs @@ -18,7 +18,7 @@ impl DijkstraPageInfo { fn from_page_info(info: PageInfo) -> Self { Self { cost: u32::MAX, - prev: PageIdx(u32::MAX), + prev: PageIdx::MAX, redirect: info.redirect, } } @@ -122,7 +122,7 @@ fn dijkstra( loop { steps.push(at); at = data.page(at).data.prev; - if at == PageIdx(u32::MAX) { + if at == PageIdx::MAX { break; }; } diff --git a/brood/src/data/adjacency_list.rs b/brood/src/data/adjacency_list.rs index 016cc1b..ca45843 100644 --- a/brood/src/data/adjacency_list.rs +++ b/brood/src/data/adjacency_list.rs @@ -5,6 +5,10 @@ pub const SENTINEL_PAGE_MARKER: &str = "Q2AKO3OYzyitmCJURghJ"; #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] pub struct PageIdx(pub u32); +impl PageIdx { + pub const MAX: PageIdx = PageIdx(u32::MAX); +} + #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] pub struct LinkIdx(pub u32); @@ -61,6 +65,10 @@ impl AdjacencyList { &mut self.pages[idx.0 as usize] } + pub fn pages_range(&self) -> impl DoubleEndedIterator { + (0..self.pages.len() as u32 - 1).map(PageIdx) + } + pub fn link_range(&self, idx: PageIdx) -> impl DoubleEndedIterator { let start_idx = self.page(idx).start; let end_idx = self.page(PageIdx(idx.0 + 1)).start;