2021-05-25 10:42:06 +05:30
|
|
|
use anyhow::Result;
|
2021-03-24 19:50:20 +05:30
|
|
|
|
|
|
|
use crate::pdata::btree_builder::*;
|
|
|
|
use crate::pdata::space_map::*;
|
2021-05-25 10:42:06 +05:30
|
|
|
use crate::pdata::space_map_common::*;
|
2021-03-24 19:50:20 +05:30
|
|
|
use crate::write_batcher::*;
|
|
|
|
|
2021-05-25 10:42:06 +05:30
|
|
|
//------------------------------------------
|
2021-03-24 19:50:20 +05:30
|
|
|
|
|
|
|
pub fn write_disk_sm(w: &mut WriteBatcher, sm: &dyn SpaceMap) -> Result<SMRoot> {
|
|
|
|
let (index_entries, ref_count_root) = write_common(w, sm)?;
|
2021-05-04 13:40:20 +05:30
|
|
|
|
2021-03-24 19:50:20 +05:30
|
|
|
let mut index_builder: Builder<IndexEntry> = Builder::new(Box::new(NoopRC {}));
|
|
|
|
for (i, ie) in index_entries.iter().enumerate() {
|
|
|
|
index_builder.push_value(w, i as u64, *ie)?;
|
|
|
|
}
|
|
|
|
|
|
|
|
let bitmap_root = index_builder.complete(w)?;
|
2021-05-25 23:11:37 +05:30
|
|
|
w.flush()?;
|
2021-03-24 19:50:20 +05:30
|
|
|
|
|
|
|
Ok(SMRoot {
|
|
|
|
nr_blocks: sm.get_nr_blocks()?,
|
|
|
|
nr_allocated: sm.get_nr_allocated()?,
|
|
|
|
bitmap_root,
|
|
|
|
ref_count_root,
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2021-05-25 10:42:06 +05:30
|
|
|
//------------------------------------------
|