mod leveled;
mod size_tiered;
pub use self::leveled::LeveledStrategy;
pub use self::size_tiered::SizeTieredStrategy;
use lsm_tree::{Result, SSTable, SSTableValue};
use std::borrow::Borrow;
use std::hash::Hash;
use std::path::Path;
pub type CompactionIter<T, U> = Iterator<Item = Result<(T, U)>>;
pub trait CompactionStrategy<T, U> {
fn get_path(&self) -> &Path;
fn get_max_in_memory_size(&self) -> u64;
fn get_and_increment_logical_time(&mut self) -> Result<u64>;
fn try_compact(&mut self, sstable: SSTable<T, U>) -> Result<()>;
fn flush(&mut self) -> Result<()>;
fn get<V>(&mut self, key: &V) -> Result<Option<SSTableValue<U>>>
where
T: Borrow<V>,
V: Ord + Hash + ?Sized,
;
fn len_hint(&mut self) -> Result<usize>;
fn len(&mut self) -> Result<usize>;
fn is_empty(&mut self) -> Result<bool>;
fn clear(&mut self) -> Result<()>;
fn min(&mut self) -> Result<Option<T>>;
fn max(&mut self) -> Result<Option<T>>;
fn iter(&mut self) -> Result<Box<CompactionIter<T, U>>>;
}