mod leveled;
mod size_tiered;
pub use self::leveled::LeveledStrategy;
pub use self::size_tiered::SizeTieredStrategy;
use lsm_tree::{Result, SSTable, SSTableValue};
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(&mut self, key: &T) -> Result<Option<SSTableValue<U>>>;
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>>>;
}