diff --git a/app/src/main.rs b/app/src/main.rs index 60969c3..52bd56c 100644 --- a/app/src/main.rs +++ b/app/src/main.rs @@ -232,7 +232,7 @@ fn main() { } fn read_from_db2(id: u32) -> Option<Question> { - let mut reader: db::Reader<Question> = + let reader: db::Reader<Question> = db::Reader::new(NEW_DB_FILENAME, 2048).expect("new db reader"); let mut questions = reader.iter(); diff --git a/lib/src/db.rs b/lib/src/db.rs index f8d9b27..d2b5396 100644 --- a/lib/src/db.rs +++ b/lib/src/db.rs @@ -3,6 +3,7 @@ use std::{ io::{self, Cursor, Read, Write}, marker::PhantomData, path::Path, + sync::Arc }; use memmap::{Mmap, MmapOptions}; @@ -157,7 +158,7 @@ where mmap: Mmap, count: usize, first_pos: LSize, - _t: PhantomData<*const T>, + _t: Option<Arc<T>> // PhantomData replacement } impl<T> Reader<T> @@ -178,7 +179,7 @@ where mmap, count, first_pos, - _t: PhantomData, + _t: None }) } @@ -190,7 +191,7 @@ where 0 == self.len() } - pub fn get(&mut self, index: usize) -> Result<T, String> { + pub fn get(&self, index: usize) -> Result<T, String> { if index >= self.len() { return Err("index out of range".into()); } @@ -222,7 +223,7 @@ where Ok(item.0) } - pub fn iter(&mut self) -> ReaderIter<'_, T> { + pub fn iter(&self) -> ReaderIter<'_, T> { ReaderIter::new(self) } } @@ -231,7 +232,7 @@ pub struct ReaderIter<'a, T> where T: bincode::Decode, { - reader: &'a mut Reader<T>, + reader: &'a Reader<T>, index: Option<usize>, } @@ -239,7 +240,7 @@ impl<'a, T> ReaderIter<'a, T> where T: bincode::Decode, { - fn new(reader: &'a mut Reader<T>) -> Self { + fn new(reader: &'a Reader<T>) -> Self { ReaderIter { reader, index: None, @@ -345,7 +346,7 @@ mod test { writer.load(&mut items.clone().into_iter()).expect("load"); writer.finish().expect("finish write"); - let mut reader: Reader<TestData> = Reader::new(&tmpfile, 2048).expect("new reader"); + let reader: Reader<TestData> = Reader::new(&tmpfile, 2048).expect("new reader"); assert_eq!(items.len(), reader.len()); for (idx, item) in items.iter().enumerate() { @@ -372,7 +373,7 @@ mod test { writer.load(&mut items.clone().into_iter()).expect("load"); writer.finish().expect("finish write"); - let mut reader: Reader<TestData> = Reader::new(&tmpfile, 2048).expect("new reader"); + let reader: Reader<TestData> = Reader::new(&tmpfile, 2048).expect("new reader"); assert_eq!(items.len(), reader.len()); items.into_iter().zip(reader.iter()).for_each(|pair| {