Add PageIdx::MAX

This commit is contained in:
Joscha 2024-08-25 22:04:55 +02:00
parent 7a2372fedd
commit 17b118693f
3 changed files with 12 additions and 4 deletions

View file

@ -18,7 +18,7 @@ impl DijkstraPageInfo {
fn from_page_info(info: PageInfo) -> Self { fn from_page_info(info: PageInfo) -> Self {
Self { Self {
cost: u32::MAX, cost: u32::MAX,
prev: PageIdx(u32::MAX), prev: PageIdx::MAX,
redirect: info.redirect, redirect: info.redirect,
} }
} }
@ -131,7 +131,7 @@ fn find_longest_shortest_path(
loop { loop {
steps.push(at); steps.push(at);
at = data.page(at).data.prev; at = data.page(at).data.prev;
if at == PageIdx(u32::MAX) { if at == PageIdx::MAX {
break; break;
}; };
} }

View file

@ -18,7 +18,7 @@ impl DijkstraPageInfo {
fn from_page_info(info: PageInfo) -> Self { fn from_page_info(info: PageInfo) -> Self {
Self { Self {
cost: u32::MAX, cost: u32::MAX,
prev: PageIdx(u32::MAX), prev: PageIdx::MAX,
redirect: info.redirect, redirect: info.redirect,
} }
} }
@ -122,7 +122,7 @@ fn dijkstra(
loop { loop {
steps.push(at); steps.push(at);
at = data.page(at).data.prev; at = data.page(at).data.prev;
if at == PageIdx(u32::MAX) { if at == PageIdx::MAX {
break; break;
}; };
} }

View file

@ -5,6 +5,10 @@ pub const SENTINEL_PAGE_MARKER: &str = "Q2AKO3OYzyitmCJURghJ";
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct PageIdx(pub u32); pub struct PageIdx(pub u32);
impl PageIdx {
pub const MAX: PageIdx = PageIdx(u32::MAX);
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct LinkIdx(pub u32); pub struct LinkIdx(pub u32);
@ -61,6 +65,10 @@ impl<P, L> AdjacencyList<P, L> {
&mut self.pages[idx.0 as usize] &mut self.pages[idx.0 as usize]
} }
pub fn pages_range(&self) -> impl DoubleEndedIterator<Item = PageIdx> {
(0..self.pages.len() as u32 - 1).map(PageIdx)
}
pub fn link_range(&self, idx: PageIdx) -> impl DoubleEndedIterator<Item = LinkIdx> { pub fn link_range(&self, idx: PageIdx) -> impl DoubleEndedIterator<Item = LinkIdx> {
let start_idx = self.page(idx).start; let start_idx = self.page(idx).start;
let end_idx = self.page(PageIdx(idx.0 + 1)).start; let end_idx = self.page(PageIdx(idx.0 + 1)).start;