diff --git a/brood/src/data/adjacency_list.rs b/brood/src/data/adjacency_list.rs index 04a1124..2de1631 100644 --- a/brood/src/data/adjacency_list.rs +++ b/brood/src/data/adjacency_list.rs @@ -10,7 +10,7 @@ pub struct Page
{ } impl
Page
{
- pub fn change_data (self, page: &P, f: &impl Fn(&P, L) -> L2) -> Link {
@@ -42,8 +49,8 @@ pub struct AdjacencyList {
impl Default for AdjacencyList {
fn default() -> Self {
Self {
- pages: Default::default(),
- links: Default::default(),
+ pages: vec![],
+ links: vec![],
}
}
}
@@ -102,11 +109,11 @@ impl AdjacencyList {
self.link_range(page_idx).map(|i| (i, self.link(i)))
}
- pub fn change_page_data AdjacencyList {
}
}
- pub fn change_link_data {
+ pub fn change_link_data {
let links = self
.links
.into_iter()
- .map(|l| l.change_data(link_f))
+ .map(|l| l.change_data(&link_f))
.collect:: AdjacencyList {
links,
}
}
+
+ pub fn change_link_data_with_page {
+ let mut pages = self.pages.iter().peekable();
+ let Some(mut cur_page) = pages.next() else {
+ // The list is empty, nothing to do
+ return AdjacencyList::default();
+ };
+
+ let mut links = vec![];
+
+ for (i, link) in self.links.into_iter().enumerate() {
+ if let Some(page) = pages.peek() {
+ if i >= page.start as usize {
+ cur_page = page;
+ pages.next();
+ }
+ }
+
+ links.push(link.change_data_with_page(&cur_page.data, &link_f));
+ }
+
+ AdjacencyList {
+ pages: self.pages,
+ links,
+ }
+ }
}
impl AdjacencyList