Trait sanakirja::btree::BTreeMutPage [−][src]
pub trait BTreeMutPage<K, V>: BTreePage<K, V> + Debug where
K: ?Sized,
V: ?Sized, {
type Saved;
fn init(page: &mut MutPage);
fn put<T>(
txn: &mut T,
page: CowPage,
mutable: bool,
replace: bool,
c: &Self::Cursor,
k0: &'a K,
v0: &'a V,
k1v1: Option<(&'a K, &'a V)>,
l: u64,
r: u64
) -> Result<Put<'a, K, V>, <T as LoadPage>::Error>
where
T: AllocPage;
unsafe fn put_mut(
page: &mut MutPage,
c: &mut Self::Cursor,
k0: &K,
v0: &V,
r: u64
);
unsafe fn set_left_child(page: &mut MutPage, c: &Self::Cursor, l: u64);
fn update_left_child<T>(
txn: &mut T,
page: CowPage,
mutable: bool,
c: &Self::Cursor,
r: u64
) -> Result<Ok, <T as LoadPage>::Error>
where
T: AllocPage;
fn save_deleted_leaf_entry(k: &K, v: &V) -> Self::Saved;
unsafe fn from_saved<'a>(s: &Self::Saved) -> (&'a K, &'a V);
fn del<T>(
txn: &mut T,
page: CowPage,
mutable: bool,
c: &Self::Cursor,
l: u64
) -> Result<(MutPage, u64), <T as LoadPage>::Error>
where
T: AllocPage;
fn merge_or_rebalance<T>(
txn: &mut T,
m: Concat<'a, K, V, Self>
) -> Result<Op<'a, T, K, V>, <T as LoadPage>::Error>
where
T: AllocPage;
}
Associated Types
Required methods
Add an entry to the page, possibly splitting the page in the process.
Makes the assumption that k1v1.is_some()
implies
replace
. When k1v1.is_some()
, we insert both (k0, v0)
(as a replacement), followed by (k1, v1)
. This is only ever
used when deleting, and when the right child of a deleted
entry (in an internal node) has split while we were looking
for a replacement for the deleted entry.
Since we only look for replacements in the right child, the
left child of the insertion isn’t modified, in which case l
and r
are interpreted as the left and right child of the new
entry, k1v1
.
Add an entry to page
, at position c
. Does not check
whether there is enough space to do so. This method is mostly
useful for cloning pages.
unsafe fn set_left_child(page: &mut MutPage, c: &Self::Cursor, l: u64)
Update the left child of the position pointed to by the cursor.
fn save_deleted_leaf_entry(k: &K, v: &V) -> Self::Saved
fn save_deleted_leaf_entry(k: &K, v: &V) -> Self::Saved
Save a leaf entry as a replacement, when we delete at an internal node. This can be a pointer to the leaf if the leaf isn’t mutated, or the actual value, or something else.
Delete an entry on the page, returning the resuting page along
with the offset of the freed page (or 0 if no page was freed,
i.e. if page
is mutable).