use std::sync::Arc;
use crate::manifest::version_edit::FileMetaData;
use crate::sst::table_reader::TableReader;
#[derive(Clone)]
pub struct TableFile {
pub meta: FileMetaData,
pub reader: Arc<TableReader>,
}
#[derive(Clone)]
pub struct Version {
pub files: Vec<Vec<TableFile>>,
pub num_levels: usize,
}
impl Version {
pub fn new(num_levels: usize) -> Self {
Self {
files: vec![Vec::new(); num_levels],
num_levels,
}
}
pub fn level_files(&self, level: usize) -> &[TableFile] {
&self.files[level]
}
pub fn total_files(&self) -> usize {
self.files.iter().map(|f| f.len()).sum()
}
pub fn l0_file_count(&self) -> usize {
self.files[0].len()
}
}
impl std::fmt::Debug for Version {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "Version {{ levels: [")?;
for (i, level) in self.files.iter().enumerate() {
if !level.is_empty() {
write!(f, "L{}: {} files, ", i, level.len())?;
}
}
write!(f, "] }}")
}
}