pub struct CowBTree {
root_sector: u32,
}Expand description
ディスク上のCOW B-Treeインデックスマネージャ
Fields§
§root_sector: u32Implementations§
Source§impl CowBTree
impl CowBTree
pub fn new(root_sector: u32) -> Self
pub fn get_root(&self) -> u32
Sourcepub fn search<B: BlockDevice>(
&self,
device: &mut MirroredBlockDevice<B>,
key: &[u8; 16],
) -> Option<u32>
pub fn search<B: BlockDevice>( &self, device: &mut MirroredBlockDevice<B>, key: &[u8; 16], ) -> Option<u32>
指定したキーを B-Tree から検索します (O(log N) 探索) 成功すると、指し示されているファイルメタデータセクタ番号を返します。
Sourcepub fn insert<B: BlockDevice>(
&mut self,
device: &mut MirroredBlockDevice<B>,
key: &[u8; 16],
val_sector: u32,
alloc_sector_fn: &mut dyn FnMut() -> u32,
) -> Result<u32, &'static str>
pub fn insert<B: BlockDevice>( &mut self, device: &mut MirroredBlockDevice<B>, key: &[u8; 16], val_sector: u32, alloc_sector_fn: &mut dyn FnMut() -> u32, ) -> Result<u32, &'static str>
インデックスへ新しいキーとセクタのペアを挿入します (COWによる再帰的ツリー更新) 更新された新しいルートノードのセクタ番号を返します。
Sourcepub fn collect_leaf_entries<B: BlockDevice>(
&self,
device: &mut MirroredBlockDevice<B>,
out: &mut Vec<([u8; 16], u32)>,
)
pub fn collect_leaf_entries<B: BlockDevice>( &self, device: &mut MirroredBlockDevice<B>, out: &mut Vec<([u8; 16], u32)>, )
すべての葉ノードエントリ (key, value_sector) を収集
fn collect_from_node<B: BlockDevice>( &self, device: &mut MirroredBlockDevice<B>, sector: u32, out: &mut Vec<([u8; 16], u32)>, visited: &mut Vec<u32>, )
Sourcefn insert_recursive<B: BlockDevice>(
&self,
device: &mut MirroredBlockDevice<B>,
curr_sector: u32,
key: &[u8; 16],
val_sector: u32,
alloc_sector_fn: &mut dyn FnMut() -> u32,
) -> Result<InsertResult, &'static str>
fn insert_recursive<B: BlockDevice>( &self, device: &mut MirroredBlockDevice<B>, curr_sector: u32, key: &[u8; 16], val_sector: u32, alloc_sector_fn: &mut dyn FnMut() -> u32, ) -> Result<InsertResult, &'static str>
COW を保ちつつ、B-Treeに再帰的に挿入を行います。
Sourcefn split_node<B: BlockDevice>(
&self,
device: &mut MirroredBlockDevice<B>,
node: &mut BTreeNode,
new_sector: u32,
alloc_sector_fn: &mut dyn FnMut() -> u32,
) -> Result<InsertResult, &'static str>
fn split_node<B: BlockDevice>( &self, device: &mut MirroredBlockDevice<B>, node: &mut BTreeNode, new_sector: u32, alloc_sector_fn: &mut dyn FnMut() -> u32, ) -> Result<InsertResult, &'static str>
ノードの半分を別の新しいセクタに分割し、親への引き上げ情報を返します (COW対応)
Auto Trait Implementations§
impl Freeze for CowBTree
impl RefUnwindSafe for CowBTree
impl Send for CowBTree
impl Sync for CowBTree
impl Unpin for CowBTree
impl UnsafeUnpin for CowBTree
impl UnwindSafe for CowBTree
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more