From d910047b48ad3b74888e484395e68345a349e421 Mon Sep 17 00:00:00 2001 From: Joscha Date: Mon, 3 Oct 2022 18:11:37 +0200 Subject: [PATCH] Perform consistency check when reexporting --- brood/src/commands/ingest.rs | 7 +------ brood/src/commands/reexport.rs | 3 +++ brood/src/data.rs | 9 +++++++++ 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/brood/src/commands/ingest.rs b/brood/src/commands/ingest.rs index 6356431..dc6263e 100644 --- a/brood/src/commands/ingest.rs +++ b/brood/src/commands/ingest.rs @@ -206,12 +206,7 @@ pub fn ingest(datafile: &Path) -> io::Result<()> { let data = second_stage.into_adjacency_list(); eprintln!(">> Consistency check"); - let range = 0..data.pages.len() as u32; - for link in &data.links { - if !range.contains(&link.to) { - eprintln!("Invalid link detected!"); - } - } + data.check_consistency(); eprintln!(">> Export"); let mut datafile = BufWriter::new(File::create(datafile)?); diff --git a/brood/src/commands/reexport.rs b/brood/src/commands/reexport.rs index 9e45f3c..715db7e 100644 --- a/brood/src/commands/reexport.rs +++ b/brood/src/commands/reexport.rs @@ -9,6 +9,9 @@ pub fn reexport(from: &Path, to: &Path) -> io::Result<()> { let from = BufReader::new(File::open(from)?); let data = AdjacencyList::read(from)?; + eprintln!(">> Consistency check"); + data.check_consistency(); + eprintln!(">> Export"); let to = BufWriter::new(File::create(to)?); data.write(to)?; diff --git a/brood/src/data.rs b/brood/src/data.rs index f57c42d..75c06c7 100644 --- a/brood/src/data.rs +++ b/brood/src/data.rs @@ -24,6 +24,15 @@ pub struct AdjacencyList { } impl AdjacencyList { + pub fn check_consistency(&self) { + let range = 0..self.pages.len() as u32; + for link in &self.links { + if !range.contains(&link.to) { + panic!("Invalid link detected!"); + } + } + } + pub fn write(&self, mut to: W) -> io::Result<()> { let n_pages: u32 = self.pages.len() as u32; to.write_all(&n_pages.to_le_bytes())?;