diff --git a/src/database/volatile/mod.rs b/src/database/volatile/mod.rs index ead4f30..32cbdb7 100644 --- a/src/database/volatile/mod.rs +++ b/src/database/volatile/mod.rs @@ -6,9 +6,10 @@ //! #### Authorship //! //! - Max Fierro, 2/24/2024 (maxfierro@berkeley.edu) +//! - Implementation: Casey Stanford, 4/10/2024 (cqstanford@berkeley.edu) use anyhow::Result; -use bitvec::{order::Msb0, slice::BitSlice, store::BitStore}; +use bitvec::{prelude::*, order::Msb0, slice::BitSlice, store::BitStore}; use std::collections::HashMap; @@ -21,10 +22,10 @@ use crate::{ //TODO: efficient version: have a huge Vec chunk of memory, and HashMap just stores indexes in that memory chunk pub struct Database { - memory: HashMap>, + memory: HashMap>, } -impl Database<'_> { +impl Database { pub fn initialize() -> Self { Self { memory: HashMap::new(), @@ -33,9 +34,9 @@ impl Database<'_> { } -impl KVStore for Database<'_> { +impl KVStore for Database { fn put(&mut self, key: State, value: &R) { - let new = Vec::from(value).clone(); + let new = BitVec::from(value.raw()).clone(); self.memory.insert(key, new); } @@ -54,7 +55,7 @@ impl KVStore for Database<'_> { -impl Tabular for Database<'_> { +impl Tabular for Database { fn create_table(&self, id: &str, schema: Schema) -> Result<()> { todo!() } @@ -67,3 +68,38 @@ impl Tabular for Database<'_> { todo!() } } + + + +#[cfg(test)] +mod tests { + + use super::*; + + pub struct Rec { + value: BitVec, + } + + impl Rec { + pub fn initialize(val: BitVec) -> Self { + Self { + value: val.clone(), + } + } + } + + impl Record for Rec { + fn raw(&self) -> &BitSlice { + return &self.value[..]; + } + } + + #[test] + fn put_data_and_get_it() { + let mut db: Database = Database::initialize(); + let test_state: State = 7; + //assert!(db.get(test_state).is_none()); + let test_rec: Rec = Rec::initialize(BitVec::::new()); + db.put(test_state, &test_rec); + } +}