Trait sanakirja_core::btree::BTreeMutPage[][src]

pub trait BTreeMutPage<K: ?Sized, V: ?Sized>: BTreePage<K, V> + Debug {
    type Saved;
    fn init(page: &mut MutPage);
fn put<'a, T: AllocPage>(
        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::Error>;
fn update_left_child<T: AllocPage>(
        txn: &mut T,
        page: CowPage,
        mutable: bool,
        c: &Self::Cursor,
        r: u64
    ) -> Result<Ok, T::Error>;
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: AllocPage>(
        txn: &mut T,
        page: CowPage,
        mutable: bool,
        c: &Self::Cursor,
        l: u64
    ) -> Result<(MutPage, u64), T::Error>;
fn merge_or_rebalance<'a, 'b, T: AllocPage>(
        txn: &mut T,
        m: Concat<'a, K, V, Self>
    ) -> Result<Op<'a, T, K, V>, T::Error>; unsafe fn put_mut(
        page: &mut MutPage,
        c: &Self::Cursor,
        k0: &K,
        v0: &V,
        r: u64
    ) { ... }
unsafe fn set_left_child(page: &mut MutPage, c: &Self::Cursor, l: u64) { ... } }

Associated Types

Loading content...

Required methods

fn init(page: &mut MutPage)[src]

Initialise a page.

fn put<'a, T: AllocPage>(
    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::Error>
[src]

Add an entry to the page, possibly splitting the page in the process.

Makes the assumption that k1v1.is_some() implies replace. The “double insertion” 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.

fn update_left_child<T: AllocPage>(
    txn: &mut T,
    page: CowPage,
    mutable: bool,
    c: &Self::Cursor,
    r: u64
) -> Result<Ok, T::Error>
[src]

Update the left child of the position pointed to by the cursor.

fn save_deleted_leaf_entry(k: &K, v: &V) -> Self::Saved[src]

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.

unsafe fn from_saved<'a>(s: &Self::Saved) -> (&'a K, &'a V)[src]

Recover the saved value.

fn del<T: AllocPage>(
    txn: &mut T,
    page: CowPage,
    mutable: bool,
    c: &Self::Cursor,
    l: u64
) -> Result<(MutPage, u64), T::Error>
[src]

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).

fn merge_or_rebalance<'a, 'b, T: AllocPage>(
    txn: &mut T,
    m: Concat<'a, K, V, Self>
) -> Result<Op<'a, T, K, V>, T::Error>
[src]

Merge, rebalance or update a concatenation.

Loading content...

Provided methods

unsafe fn put_mut(page: &mut MutPage, c: &Self::Cursor, k0: &K, v0: &V, r: u64)[src]

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)[src]

Loading content...

Implementors

impl<K: Storable + Debug, V: Storable + Debug> BTreeMutPage<K, V> for sanakirja_core::btree::page::Page<K, V>[src]

type Saved = (K, V)

impl<K: UnsizedStorable + ?Sized + Debug, V: UnsizedStorable + ?Sized + Debug> BTreeMutPage<K, V> for sanakirja_core::btree::page_unsized::Page<K, V>[src]

type Saved = (*const K, *const V)

Loading content...