From d6fa5c8a55f83def4c2414e7f947295bf7172dfe Mon Sep 17 00:00:00 2001 From: nym21 Date: Sun, 13 Jul 2025 16:31:22 +0200 Subject: [PATCH] vec: fix header reading of existing file --- crates/brk_vec/examples/main.rs | 10 +++++++--- crates/brk_vec/src/structs/header.rs | 9 +++++---- crates/brk_vec/src/variants/raw.rs | 11 ++++++----- 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/crates/brk_vec/examples/main.rs b/crates/brk_vec/examples/main.rs index b82a6ba19..f067a1b77 100644 --- a/crates/brk_vec/examples/main.rs +++ b/crates/brk_vec/examples/main.rs @@ -1,13 +1,15 @@ use std::{fs, path::Path}; -use brk_core::{DateIndex, Height, Version}; +use brk_core::{DateIndex, Height, Printable, Version}; use brk_vec::{AnyVec, CollectableVec, Format, GenericStoredVec, StoredVec, VecIterator}; +type I = DateIndex; #[allow(clippy::upper_case_acronyms)] -type VEC = StoredVec; +type VEC = StoredVec; fn main() -> Result<(), Box> { let _ = fs::remove_dir_all("./vec"); + let _ = fs::remove_file("./vec"); let version = Version::TWO; let format = Format::Compressed; @@ -15,12 +17,14 @@ fn main() -> Result<(), Box> { { let mut vec: VEC = StoredVec::forced_import(Path::new("."), "vec", version, format)?; - (0..21_u32).for_each(|v| { + (0..4_u32).for_each(|v| { vec.push(v); }); let mut iter = vec.into_iter(); dbg!(iter.get(0.into())); + dbg!(iter.get(1.into())); + dbg!(iter.get(2.into())); dbg!(iter.get(20.into())); dbg!(iter.get(21.into())); diff --git a/crates/brk_vec/src/structs/header.rs b/crates/brk_vec/src/structs/header.rs index b50254c57..f4bb90cbd 100644 --- a/crates/brk_vec/src/structs/header.rs +++ b/crates/brk_vec/src/structs/header.rs @@ -1,6 +1,6 @@ use std::{ fs::File, - io::{self, Read, Seek, SeekFrom}, + io::{self, Seek, SeekFrom}, os::unix::fs::FileExt, sync::Arc, }; @@ -103,7 +103,6 @@ impl HeaderInner { compressed: ZeroCopyBool::from(format), }; header.write(file)?; - // dbg!(file.bytes().map(|b| b.unwrap()).collect::>()); file.seek(SeekFrom::End(0))?; Ok(header) } @@ -117,12 +116,14 @@ impl HeaderInner { vec_version: Version, format: Format, ) -> Result { - if file.metadata()?.len() < HEADER_OFFSET as u64 { + let len = file.metadata()?.len(); + + if len < HEADER_OFFSET as u64 { return Err(Error::WrongLength); } let mut buf = [0; HEADER_OFFSET]; - file.read_exact(&mut buf)?; + file.read_exact_at(&mut buf, 0)?; let header = HeaderInner::read_from_bytes(&buf)?; diff --git a/crates/brk_vec/src/variants/raw.rs b/crates/brk_vec/src/variants/raw.rs index 7f3aaace8..a240736cf 100644 --- a/crates/brk_vec/src/variants/raw.rs +++ b/crates/brk_vec/src/variants/raw.rs @@ -28,8 +28,8 @@ pub struct RawVec { parent: PathBuf, name: &'static str, pushed: Vec, - phantom: PhantomData, stored_len: Arc, + phantom: PhantomData, } impl RawVec @@ -77,7 +77,9 @@ where let header = Header::create_and_write(&mut file, version, Format::Raw)?; (header, None) } - _ => return Err(e.into()), + _ => { + return Err(e.into()); + } }, }; @@ -92,8 +94,8 @@ where name: Box::leak(Box::new(name.to_string())), parent: parent.to_owned(), pushed: vec![], - phantom: PhantomData, stored_len: Arc::new(AtomicUsize::new(stored_len)), + phantom: PhantomData, }) } @@ -306,12 +308,11 @@ where type Item = (I, Cow<'a, T>); fn next(&mut self) -> Option { - let mmap = &self.mmap; let index = self.index; let opt = self .vec - .get_or_read_(index, mmap) + .get_or_read_(index, &self.mmap) .unwrap() .map(|v| (I::from(index), v));