refactor: move iterator trait to parent mod

Signed-off-by: Alex Chi <iskyzh@gmail.com>
This commit is contained in:
Alex Chi
2022-12-24 18:25:41 -05:00
parent 7a571a7c7d
commit d8cc9b2cf8
22 changed files with 79 additions and 49 deletions

View File

@@ -1,6 +1,19 @@
pub mod impls;
pub mod merge_iterator;
pub mod two_merge_iterator;
pub trait StorageIterator {
/// Get the current value.
fn value(&self) -> &[u8];
/// Get the current key.
fn key(&self) -> &[u8];
/// Check if the current iterator is valid.
fn is_valid(&self) -> bool;
/// Move to the next position.
fn next(&mut self) -> anyhow::Result<()>;
}
#[cfg(test)]
mod tests;

View File

@@ -1,15 +0,0 @@
use anyhow::Result;
pub trait StorageIterator {
/// Get the current value.
fn value(&self) -> &[u8];
/// Get the current key.
fn key(&self) -> &[u8];
/// Check if the current iterator is valid.
fn is_valid(&self) -> bool;
/// Move to the next position.
fn next(&mut self) -> Result<()>;
}

View File

@@ -6,7 +6,7 @@ use std::collections::BinaryHeap;
use anyhow::Result;
use super::impls::StorageIterator;
use super::StorageIterator;
struct HeapWrapper<I: StorageIterator>(pub usize, pub Box<I>);

View File

@@ -3,7 +3,7 @@
use anyhow::Result;
use super::impls::StorageIterator;
use super::StorageIterator;
/// Merges two iterators of different types into one. If the two iterators have the same key, only
/// produce the key once and prefer the entry from A.

View File

@@ -3,7 +3,7 @@
use anyhow::Result;
use crate::iterators::impls::StorageIterator;
use crate::iterators::StorageIterator;
pub struct LsmIterator {}

View File

@@ -45,24 +45,32 @@ impl LsmStorage {
})
}
/// Get a key from the storage. In day 7, this can be further optimized by using a bloom filter.
pub fn get(&self, key: &[u8]) -> Result<Option<Bytes>> {
unimplemented!()
}
/// Put a key-value pair into the storage by writing into the current memtable.
pub fn put(&self, key: &[u8], value: &[u8]) -> Result<()> {
assert!(!value.is_empty(), "value cannot be empty");
assert!(!key.is_empty(), "key cannot be empty");
unimplemented!()
}
/// Remove a key from the storage by writing an empty value.
pub fn delete(&self, _key: &[u8]) -> Result<()> {
unimplemented!()
}
/// Persist data to disk.
///
/// In day 3: flush the current memtable to disk as L0 SST.
/// In day 6: call `fsync` on WAL.
pub fn sync(&self) -> Result<()> {
unimplemented!()
}
/// Create an iterator over a range of keys.
pub fn scan(
&self,
_lower: Bound<&[u8]>,

View File

@@ -9,7 +9,7 @@ use bytes::Bytes;
use crossbeam_skiplist::SkipMap;
use ouroboros::self_referencing;
use crate::iterators::impls::StorageIterator;
use crate::iterators::StorageIterator;
use crate::table::SsTableBuilder;
/// A basic mem-table based on crossbeam-skiplist

View File

@@ -6,7 +6,7 @@ use std::sync::Arc;
use anyhow::Result;
use super::SsTable;
use crate::iterators::impls::StorageIterator;
use crate::iterators::StorageIterator;
/// An iterator over the contents of an SSTable.
pub struct SsTableIterator {}