From 5401d34c7975dbbbbbd833240bcab98dc3e38f65 Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Sun, 14 May 2023 11:23:42 +0300 Subject: refactor: rename and turn Site::pages into HashMap Sponsored-by: author --- src/lib.rs | 2 +- src/site.rs | 22 ++++++++++++++++------ 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index be6e4a9..bca0992 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -20,5 +20,5 @@ pub mod srcdir; pub mod time; pub mod token; pub mod util; -pub mod wikitext; pub mod version; +pub mod wikitext; diff --git a/src/site.rs b/src/site.rs index 64b9602..ebbd339 100644 --- a/src/site.rs +++ b/src/site.rs @@ -44,7 +44,7 @@ pub struct Site { patterns: TokenPatterns, shortcuts: HashMap, name_builder: NameBuilder, - pages: Vec, + unprocessed_pages: HashMap, markdown_pages: HashMap, pages_that_will_exist: PageSet, files: Names, @@ -60,7 +60,7 @@ impl Site { { Self { name_builder: NameBuilder::new(srcdir.as_ref(), destdir.as_ref()), - pages: vec![], + unprocessed_pages: HashMap::new(), markdown_pages: HashMap::new(), files: Names::default(), patterns: TokenPatterns::default(), @@ -99,7 +99,8 @@ impl Site { page.prepare(self)?; let page = Page::new(page.meta().clone(), page); - self.pages.push(page); + self.unprocessed_pages + .insert(page.meta().path().into(), page); Ok(()) } @@ -121,7 +122,7 @@ impl Site { } fn process_page(&mut self) -> Result { - if let Some(page) = self.pages.pop() { + if let Some(page) = self.pick_unprocessed_page() { debug!( "processing unprocessed page {}", page.meta().path().display() @@ -135,8 +136,17 @@ impl Site { } } - pub fn markdown_pages(&self) -> impl Iterator { - self.markdown_pages.iter().map(|(_, md)| md) + fn pick_unprocessed_page(&mut self) -> Option { + let mut keys: Vec = self.unprocessed_pages.keys().map(|k| k.into()).collect(); + if let Some(path) = keys.pop() { + self.unprocessed_pages.remove(&path) + } else { + None + } + } + + pub fn markdown_pages(&self) -> impl Iterator { + self.markdown_pages.values() } pub fn files_only(&self) -> impl Iterator { -- cgit v1.2.1