Skip to main content

LeafNode15

Struct LeafNode15 

Source
pub struct LeafNode15<P: LeafPolicy> { /* private fields */ }
Expand description

B-link leaf node with 15 slots, parameterized over LeafPolicy.

Implementations§

Source§

impl<P: LeafPolicy> LeafNode15<P>

Source

pub const WIDTH: usize = WIDTH_15

Node width (number of slots). Matches TreeLeafNode::WIDTH.

Source

pub fn new_with_root(is_root: bool) -> Self

Create a new leaf node (unboxed).

Source

pub unsafe fn init_at(ptr: *mut Self, is_root: bool)

Initialize a leaf node directly at the given pointer.

§Safety

Inline comments.

Source

pub fn new() -> Box<Self>

Create a new leaf node (boxed).

Source

pub fn new_root() -> Box<Self>

Create a new leaf node as the root of a tree/layer.

Source

pub fn make_layer_root(&self)

Convert this leaf into a layer root.

Source

pub fn new_layer_root() -> Box<Self>

Create a new leaf node configured as a layer root.

Source

pub fn new_boxed() -> Box<Self>

Inherent alias for TreeLeafNode::new_boxed.

Source

pub fn new_root_boxed() -> Box<Self>

Inherent alias for TreeLeafNode::new_root_boxed.

Source

pub fn new_layer_root_boxed() -> Box<Self>

Source

pub fn load_value(&self, slot: usize) -> Option<P::Output>

Load the terminal value at a slot.

Source

pub fn load_value_relaxed(&self, slot: usize) -> Option<P::Output>

Load the terminal value with Relaxed ordering. For use under lock where the lock’s Acquire provides visibility.

Source

pub fn store_value(&self, slot: usize, output: &P::Output)

Store a terminal value at a slot.

Source

pub fn store_value_relaxed(&self, slot: usize, output: &P::Output)

Store a terminal value with Relaxed ordering.

Source

pub fn update_value_in_place( &self, slot: usize, output: &P::Output, ) -> RetireHandle

Update an existing terminal value in place, returning a retire handle.

Source

pub fn update_value_in_place_relaxed( &self, slot: usize, output: &P::Output, ) -> RetireHandle

Update an existing terminal value with Relaxed store ordering. For use under lock where the lock’s Release on drop provides synchronization.

Source

pub fn take_value(&self, slot: usize) -> Option<P::Output>

Take the terminal value from a slot, leaving it empty.

Source

pub unsafe fn write_through_update_value( &self, slot: usize, new_value: &P::Value, ) -> P::Value

Write-through update: atomically read old value and write new value.

Bypasses Box allocation and EBR retirement. Only callable when P::CAN_WRITE_THROUGH is true.

§Safety
  • Caller must hold the leaf lock.
  • Slot must contain a terminal value.
Source

pub fn load_layer(&self, slot: usize) -> *mut u8

Load the layer pointer at a slot.

Source

pub fn store_layer(&self, slot: usize, ptr: *mut u8)

Store a layer pointer at a slot.

Source

pub fn take_value_for_layer(&self, slot: usize) -> RetireHandle

Take the value at a slot when converting it to a layer pointer.

Source

pub fn prefetch_value(&self, slot: usize)

Prefetch the value at a slot to hide memory latency.

Source

pub fn prefetch_suffix(&self)

Prefetch suffix storage into cache for upcoming access.

Source

pub unsafe fn load_value_ptr(&self, slot: usize) -> *const P::Value

Load the typed value pointer at a slot.

§Safety

Caller must ensure the slot contains a terminal value, not a layer.

Source

pub fn is_slot_empty(&self, slot: usize) -> bool

Check if a slot is empty (no value, no layer).

Source

pub fn is_value_empty(&self, slot: usize) -> bool

Check if a slot has no value stored.

Source

pub fn is_value_empty_relaxed(&self, slot: usize) -> bool

Relaxed empty check for OCC search loops.

The permutation Acquire load provides synchronization with writers. The OCC has_changed() check validates after all reads.

Source

pub fn load_layer_raw(&self, slot: usize) -> *mut u8

Load the raw layer pointer at a slot.

Source

pub fn load_value_raw(&self, slot: usize) -> *mut u8

Load the raw value pointer at a slot without interpretation.

Source

pub fn load_value_raw_relaxed(&self, slot: usize) -> *mut u8

Load the raw value pointer with Relaxed ordering.

Use when Acquire on the pointer is redundant (e.g., write-through paths where a subsequent atomic value read provides synchronization).

Source

pub fn clear_slot(&self, slot: usize)

Clear a slot’s value and keylenx (Relaxed ordering, for use under lock).

Source

pub fn clear_slot_and_permutation(&self, slot: usize)

Clear a slot’s value, keylenx, and permutation entry.

Source

pub fn classify_slot(&self, slot: usize) -> SlotKind<P::Output>

Classify a slot’s contents, extracting the value if present.

Source

pub fn classify_slot_light(&self, slot: usize) -> SlotState

Lightweight slot classification without value extration.

Source

pub fn move_value_to(&self, dst: &Self, src_slot: usize, dst_slot: usize)

Move a slot’s value from this leaf to another leaf.

Source

pub fn move_value_to_relaxed( &self, dst: &Self, src_slot: usize, dst_slot: usize, )

Move a slot’s value with Relaxed store ordering on the destination. For use under lock where the lock’s Release on drop provides synchronization.

Source

pub fn clear_value(&self, slot: usize)

Clear a slot’s value storage (without touching keylenx).

Source

pub fn clear_value_relaxed(&self, slot: usize)

Clear a slot’s value with Relaxed ordering. For use under lock where the lock’s Release on drop provides synchronization.

Source

pub fn ksuf(&self, slot: usize) -> Option<&[u8]>

Get the suffix bytes for a slot.

Source

pub fn ksuf_or_empty(&self, slot: usize) -> &[u8]

Get the suffix bytes for a slot, or an empty slice if none.

Source

pub fn ksuf_equals(&self, slot: usize, suffix: &[u8]) -> bool

Check if a slot’s suffix equals the given bytes.

Source

pub fn ksuf_compare(&self, slot: usize, suffix: &[u8]) -> Option<Ordering>

Compare a slot’s suffix with the given bytes.

Source

pub fn ksuf_matches(&self, slot: usize, ikey: u64, suffix: &[u8]) -> bool

Check if a slot’s full key matches the given ikey + suffix.

Source

pub fn ksuf_match_result(&self, slot: usize, keylenx: u8, suffix: &[u8]) -> i32

Match a slot against a key suffix, returning a result code.

Source

pub unsafe fn assign_ksuf( &self, slot: usize, suffix: &[u8], guard: &LocalGuard<'_>, ) -> *mut u8

Assign a suffix to a slot.

§Safety

Inline comments.

Source

pub unsafe fn assign_ksuf_init( &self, slot: usize, suffix: &[u8], guard: &LocalGuard<'_>, )

Assign a suffix during node initialization (sequential slots 0..slot).

§Safety

Same as assign_ksuf.

Source

pub unsafe fn assign_ksuf_prealloc( &self, slot: usize, suffix: &[u8], guard: &LocalGuard<'_>, prealloc: Vec<u8>, ) -> *mut u8

Assign a suffix using a pre-allocated buffer.

§Safety

Same as assign_ksuf.

Source

pub unsafe fn retire_suffix_bag_ptr(ptr: *mut u8, guard: &LocalGuard<'_>)

Retire a suffix bag pointer returned by assign_ksuf.

§Safety

ptr must have come from assign_ksuf and must not be null.

Source

pub unsafe fn clear_ksuf(&self, slot: usize, guard: &LocalGuard<'_>)

Clear a slot’s suffix.

§Safety

Caller must hold the leaf lock.

Source

pub fn has_external_ksuf(&self) -> bool

Check if external (overflow) suffix storage has been allocated.

Source

pub const fn version(&self) -> &NodeVersion

Get a reference to the node’s version.

Source

pub const fn version_mut(&mut self) -> &mut NodeVersion

Get a mutable reference to the node’s version.

Source

pub fn ikey(&self, slot: usize) -> u64

Get the ikey at the given physical slot.

Uses Acquire ordering to synchronize with writer’s Release stores.

§Panics

Panics in debug mode if slot >= WIDTH_15.

Source

pub fn ikey_relaxed(&self, slot: usize) -> u64

Get the ikey at the given physical slot using Relaxed ordering.

§Panics

Panics in debug mode if slot >= WIDTH_15.

Source

pub fn set_ikey(&self, slot: usize, ikey: u64)

Set the ikey at the given physical slot.

Source

pub fn prefetch_ikey(&self, slot: usize)

Prefetch the ikey at the given slot into CPU cache.

§Safety

The slot must be in range [0, WIDTH_15). No bounds check in release mode.

Source

pub fn prefetch(&self)

Prefetch leaf node data for range scans.

Prefetch for point lookup (permutation + keys + values).

Source

pub fn prefetch_for_search_adaptive(&self, size: usize)

Size-aware prefetch: only fetch cache lines that will be accessed.

Source

pub fn keylenx(&self, slot: usize) -> u8

Get the keylenx at the given physical slot.

Source

pub fn keylenx_relaxed(&self, slot: usize) -> u8

Get the keylenx with Relaxed ordering. For OCC search loops where the permutation Acquire provides synchronization.

Source

pub fn set_keylenx(&self, slot: usize, keylenx: u8)

Set the keylenx at the given physical slot.

Source

pub fn ikey_bound(&self) -> u64

Get the ikey bound (ikey at slot 0, used for B-link tree routing).

Source

pub fn keylenx_bound(&self) -> u8

Get the keylenx bound for this leaf.

Source

pub fn is_layer(&self, slot: usize) -> bool

Check if the given slot contains a layer pointer.

Source

pub fn has_ksuf(&self, slot: usize) -> bool

Check if the given slot has a suffix.

Source

pub const fn keylenx_is_layer(keylenx: u8) -> bool

Check if keylenx indicates a layer pointer (static helper).

Source

pub const fn keylenx_has_ksuf(keylenx: u8) -> bool

Check if keylenx indicates suffix storage (static helper).

Source

pub fn find_ikey_matches(&self, target_ikey: u64) -> u32

Search all 15 ikeys for matches with target, returning a bitmask.

Source

pub fn permutation(&self) -> Permuter15

Load permutation with Acquire ordering.

Source

pub fn set_permutation(&self, perm: Permuter15)

Store permutation with Release ordering.

Source

pub fn set_permutation_relaxed(&self, perm: Permuter15)

Store permutation with Relaxed ordering.

Source

pub fn permutation_raw(&self) -> u64

Get raw permutation value (for debugging).

Source

pub unsafe fn store_key_data_for_cas(&self, slot: usize, ikey: u64, keylenx: u8)

Store key metadata (ikey, keylenx) for a CAS insert attempt.

§Safety
  • The caller must have successfully claimed the slot via cas_slot_value and ensured the slot still belongs to the CAS attempt (i.e. leaf_values[slot] still equals the claimed pointer).
Source

pub fn size(&self) -> usize

Get the number of keys in this leaf.

Source

pub fn is_empty(&self) -> bool

Check if the leaf is empty.

Source

pub fn is_full(&self) -> bool

Check if the leaf is full.

Source

pub fn safe_next(&self, guard: &impl Guard) -> *mut Self

Get the next leaf pointer, masking the mark bit.

Source

pub unsafe fn safe_next_unguarded(&self) -> *mut Self

Get the next leaf pointer without guard protection.

§Safety

Caller must ensure the next pointer’s target won’t be retired during use.

Source

pub fn next_raw(&self, guard: &impl Guard) -> *mut Self

Get the raw next pointer (including mark bit).

Source

pub unsafe fn next_raw_unguarded(&self) -> *mut Self

Get the raw next pointer without guard protection.

§Safety

Caller must ensure the next pointer’s target won’t be retired during use.

Source

pub fn next_is_marked(&self) -> bool

Check if the next pointer is marked (split in progress).

Source

pub fn set_next(&self, next: *mut Self)

Set the next leaf pointer.

Source

pub fn mark_next(&self)

Mark the next pointer (during split).

Source

pub fn unmark_next(&self)

Unmark the next pointer.

Source

pub fn wait_for_split(&self)

Wait for an in-progress split to complete.

Unlink this leaf from the B-link doubly-linked chain.

§Safety
  • Caller must hold the version lock on this leaf
  • self.prev() must be non-null (not the leftmost leaf)
  • The prev and next pointers must be valid leaves
Source

pub fn prev(&self, guard: &impl Guard) -> *mut Self

Get the previous leaf pointer.

Source

pub unsafe fn prev_unguarded(&self) -> *mut Self

Get the previous leaf pointer without guard protection.

§Safety

Caller must ensure the prev pointer’s target won’t be retired during use.

Source

pub fn set_prev(&self, prev: *mut Self)

Set the previous leaf pointer.

Source

pub fn parent(&self, guard: &impl Guard) -> *mut u8

Get the parent pointer.

Uses guard protection to ensure the load participates in seize’s total order, making it safe on all architectures.

Source

pub unsafe fn parent_unguarded(&self) -> *mut u8

Get the parent pointer without guard protection.

§Safety

Caller must ensure the parent pointer’s target won’t be retired during use.

Source

pub fn set_parent(&self, parent: *mut u8)

Set the parent pointer.

Source

pub fn modstate(&self) -> u8

Get the raw modification state (includes queued bit).

Source

pub fn set_modstate(&self, state: u8)

Set the modification state (overwrites all bits including queued).

Source

pub fn modstate_relaxed(&self) -> u8

Get the raw modification state (relaxed, for use under lock).

Source

pub fn set_modstate_relaxed(&self, state: u8)

Set the modification state (relaxed, for use under lock).

Source

pub fn deleted_layer(&self) -> bool

Check if this layer has been deleted (garbage collected).

Source

pub fn mark_deleted_layer(&self)

Mark this layer as deleted (for gc_layer). Preserves queued bit.

Source

pub fn mark_remove(&self)

Mark this node as being in remove mode. Preserves queued bit.

Source

pub fn is_removing(&self) -> bool

Check if this node is in remove mode.

Source

pub fn is_empty_state(&self) -> bool

Check if this leaf is in empty state.

Source

pub fn mark_empty(&self)

Mark this leaf as empty (all keys removed). Preserves queued bit.

Source

pub fn clear_empty_state(&self)

Clear empty state, returning to normal insert mode. Stores 0, clearing the queued bit. Correct for insert reuse: invalidates any pending coalesce entry for this leaf.

Source

pub fn is_queued(&self) -> bool

Check if this leaf has a pending coalesce queue entry.

Source

pub fn try_mark_queued(&self) -> bool

Atomically set the queued bit. Returns true if the bit was not already set (this call won the race). This is the sole enqueue gate.

Source

pub fn clear_queued(&self)

Clear the queued bit atomically. Called after gc retires or skips.

Source

pub fn can_reuse_slot0(&self, new_ikey: u64) -> bool

Check if slot 0 can be reused for a new key.

Source

pub fn calculate_split_point( &self, insert_pos: usize, insert_ikey: u64, ) -> Option<SplitPoint>

Calculate the optimal split point for this leaf.

Source

pub unsafe fn split_into_preallocated( &self, split_pos: usize, new_leaf_ptr: *mut Self, guard: &LocalGuard<'_>, ) -> (u64, InsertTarget)

Split entries from position split_pos..size into a new leaf.

§Safety
  • Caller holds the lock on self.
  • new_leaf_ptr is valid, properly aligned, and points to an initialized (via new_with_root(false) or init_at) but empty leaf.
  • new_leaf_ptr is not yet visible to other threads.
Source

pub unsafe fn split_all_to_right_preallocated( &self, new_leaf_ptr: *mut Self, guard: &LocalGuard<'_>, ) -> (u64, InsertTarget)

Split ALL entries to the right leaf (used for reverse-sequential pattern).

§Safety

Same as split_into_preallocated.

Source

pub unsafe fn split_and_insert( &self, split_pos: usize, new_leaf_ptr: *mut Self, insert_pos: usize, insert_data: &SplitInsertData<'_, P>, guard: &LocalGuard<'_>, ) -> SplitInsertResult

Atomic split + insert: split entries and insert a new key in one operation.

§Safety

Same as split_into_preallocated.

Link a new sibling after this leaf during a split.

§Safety
  • Caller must hold the lock on self.
  • new_sibling must be valid and not yet in the chain.

Trait Implementations§

Source§

impl<P: LeafPolicy> Debug for LeafNode15<P>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<P: LeafPolicy> Drop for LeafNode15<P>

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

impl<P: LeafPolicy> TreeLeafNode<P> for LeafNode15<P>

Source§

const WIDTH: usize = WIDTH_15

Node width (number of slots).
Source§

const SPLIT_THRESHOLD: usize = WIDTH_15

Split threshold (trigger split when size >= this).
Source§

const INLINE_KSUF_CAPACITY: usize = 512

Inline suffix storage capacity in bytes.
Source§

type Perm = Permuter

The permutation type for this leaf.
Source§

type Internode = InternodeNode

The internode type for this tree variant.
Source§

fn new_boxed() -> Box<Self>

Create a new leaf node (boxed, non-root).
Source§

fn new_root_boxed() -> Box<Self>

Create a new root leaf node (boxed).
Source§

fn new_layer_root_boxed() -> Box<Self>

Create a new layer root leaf node (boxed).
Source§

fn version(&self) -> &NodeVersion

Get reference to the node’s version for OCC protocol.
Source§

fn permutation(&self) -> Permuter15

Load permutation with Acquire ordering.
Source§

fn set_permutation(&self, perm: Permuter15)

Store permutation with Release ordering.
Source§

fn set_permutation_relaxed(&self, perm: Permuter15)

Store permutation with Relaxed ordering (for split setup).
Source§

fn permutation_raw(&self) -> u64

Get raw permutation value for atomic operations.
Source§

fn ikey(&self, slot: usize) -> u64

Get ikey at slot with Acquire ordering.
Source§

fn ikey_relaxed(&self, slot: usize) -> u64

Get ikey at slot with Relaxed ordering (after Acquire fence).
Source§

fn set_ikey(&self, slot: usize, ikey: u64)

Set ikey at slot with Release ordering.
Source§

fn set_ikey_relaxed(&self, slot: usize, ikey: u64)

Set ikey at slot with Relaxed ordering (for split setup).
Source§

fn ikey_bound(&self) -> u64

Get the ikey bound (ikey at slot 0, used for B-link routing).
Source§

fn find_ikey_matches(&self, target_ikey: u64) -> u32

Find all slots matching target ikey, returning a bitmask.
Source§

fn keylenx(&self, slot: usize) -> u8

Get keylenx at slot.
Source§

fn keylenx_relaxed(&self, slot: usize) -> u8

Get keylenx with Relaxed ordering (for OCC search loops).
Source§

fn set_keylenx(&self, slot: usize, keylenx: u8)

Set keylenx at slot with Release ordering.
Source§

fn set_keylenx_relaxed(&self, slot: usize, keylenx: u8)

Set keylenx at slot with Relaxed ordering (for split setup).
Source§

fn is_layer(&self, slot: usize) -> bool

Check if slot contains a layer pointer.
Source§

fn has_ksuf(&self, slot: usize) -> bool

Check if slot has a key suffix.
Source§

fn load_value(&self, slot: usize) -> Option<P::Output>

Load the terminal value at a slot, returning None if empty.
Source§

fn store_value(&self, slot: usize, output: &P::Output)

Store a terminal value at a slot with Release ordering.
Source§

fn store_value_relaxed(&self, slot: usize, output: &P::Output)

Store a terminal value at a slot with Relaxed ordering (for split setup).
Source§

fn update_value_in_place(&self, slot: usize, output: &P::Output) -> RetireHandle

Update value in place, returning a handle for retiring the old value.
Source§

fn update_value_in_place_relaxed( &self, slot: usize, output: &P::Output, ) -> RetireHandle

Update value in place with Relaxed store ordering (for use under lock).
Source§

fn take_value(&self, slot: usize) -> Option<P::Output>

Take the terminal value from a slot, leaving it empty.
Source§

fn load_layer(&self, slot: usize) -> *mut u8

Load the layer pointer at a slot.
Source§

fn store_layer(&self, slot: usize, ptr: *mut u8)

Store a layer pointer at a slot.
Source§

fn is_slot_empty(&self, slot: usize) -> bool

Check if a slot is empty (no value or layer pointer).
Source§

fn classify_slot(&self, slot: usize) -> SlotKind<P::Output>

Classify a slot as empty, value, or layer, returning the value if present.
Source§

fn classify_slot_light(&self, slot: usize) -> SlotState

Classify a slot without extracting the value (lightweight variant).
Source§

fn move_value_to(&self, dst: &Self, src_slot: usize, dst_slot: usize)

Move a value from one leaf/slot to another leaf/slot.
Source§

fn clear_value(&self, slot: usize)

Clear the value at a slot (set to empty).
Source§

fn clear_slot(&self, slot: usize)

Clear all data at a slot (value, keylenx, etc.).
Source§

fn clear_slot_and_permutation(&self, slot: usize)

Clear a slot and remove it from the permutation.
Source§

fn safe_next(&self) -> *mut Self

Get the next leaf pointer, masking the mark bit (unguarded).
Source§

fn next_is_marked(&self) -> bool

Check if the next pointer is marked (split in progress).
Source§

fn set_next(&self, next: *mut Self)

Set the next leaf pointer.
Source§

fn mark_next(&self)

Mark the next pointer (set LSB for split coordination).
Source§

fn unmark_next(&self)

Unmark the next pointer (clear LSB).
Source§

fn prev(&self) -> *mut Self

Get the previous leaf pointer (unguarded).
Source§

fn set_prev(&self, prev: *mut Self)

Set the previous leaf pointer.
Source§

fn parent(&self) -> *mut u8

Get the parent internode pointer (unguarded).
Source§

fn set_parent(&self, parent: *mut u8)

Set the parent internode pointer.
Unlink this leaf from the doubly-linked chain. Read more
Source§

fn next_raw(&self) -> *mut Self

Get the raw next pointer including mark bit (unguarded).
Source§

fn wait_for_split(&self)

Spin-wait until split completes on this leaf.
Source§

fn can_reuse_slot0(&self, new_ikey: u64) -> bool

Check if slot 0 can be reused for a new key.
Source§

fn calculate_split_point( &self, insert_pos: usize, insert_ikey: u64, ) -> Option<SplitPoint>

Calculate the optimal split point for this leaf.
Source§

unsafe fn split_into_preallocated( &self, split_pos: usize, new_leaf_ptr: *mut Self, guard: &LocalGuard<'_>, ) -> (u64, InsertTarget)

Split this leaf into a preallocated sibling. Read more
Source§

unsafe fn split_all_to_right_preallocated( &self, new_leaf_ptr: *mut Self, guard: &LocalGuard<'_>, ) -> (u64, InsertTarget)

Split all entries to the right sibling (sequential-append optimization). Read more
Source§

unsafe fn split_and_insert( &self, split_pos: usize, new_leaf_ptr: *mut Self, insert_pos: usize, insert_data: &SplitInsertData<'_, P>, guard: &LocalGuard<'_>, ) -> SplitInsertResult

Atomically split this leaf and insert a new key. Read more
Link a new sibling into the B-link chain. Read more
Source§

fn ksuf(&self, slot: usize) -> Option<&[u8]>

Get the suffix at a slot, if present.
Source§

unsafe fn assign_ksuf( &self, slot: usize, suffix: &[u8], guard: &LocalGuard<'_>, ) -> *mut u8

Assign a suffix to a slot, returning the old suffix bag pointer. Read more
Source§

unsafe fn retire_suffix_bag_ptr(ptr: *mut u8, guard: &LocalGuard<'_>)

Retire a suffix bag pointer for deferred reclamation. Read more
Source§

unsafe fn assign_ksuf_init( &self, slot: usize, suffix: &[u8], guard: &LocalGuard<'_>, )

Assign a suffix during initial slot setup. Read more
Source§

unsafe fn clear_ksuf(&self, slot: usize, guard: &LocalGuard<'_>)

Clear the suffix at a slot. Read more
Source§

fn ksuf_equals(&self, slot: usize, suffix: &[u8]) -> bool

Check if the suffix at a slot equals the given suffix.
Source§

fn ksuf_compare(&self, slot: usize, suffix: &[u8]) -> Option<Ordering>

Compare the suffix at a slot with the given suffix.
Source§

fn ksuf_or_empty(&self, slot: usize) -> &[u8]

Get the suffix at a slot, or empty slice if none.
Source§

fn ksuf_matches(&self, slot: usize, ikey: u64, suffix: &[u8]) -> bool

Check if the suffix at a slot matches the given ikey and suffix.
Source§

fn ksuf_match_result(&self, slot: usize, keylenx: u8, suffix: &[u8]) -> i32

Compare suffix, returning match result code.
Source§

fn prefetch(&self)

Prefetch leaf data for range scans.
Source§

fn prefetch_ikey(&self, slot: usize)

Prefetch the ikey at a slot.
Source§

fn prefetch_for_search(&self)

Prefetch for point lookup (permutation + keys).
Source§

fn prefetch_for_search_adaptive(&self, size: usize)

Size-aware prefetch: only fetch cache lines that will be accessed.
Source§

fn modstate(&self) -> u8

Get the modification state.
Source§

fn set_modstate(&self, state: u8)

Set the modification state.
Source§

fn deleted_layer(&self) -> bool

Check if the layer has been deleted.
Source§

fn mark_deleted_layer(&self)

Mark the layer as deleted.
Source§

fn mark_remove(&self)

Mark the node for removal.
Source§

fn is_removing(&self) -> bool

Check if the node is being removed.
Source§

fn is_empty_state(&self) -> bool

Check if the node is in empty state.
Source§

fn mark_empty(&self)

Mark the node as empty.
Source§

fn clear_empty_state(&self)

Clear the empty state flag.
Source§

fn size(&self) -> usize

Get the number of keys in this leaf.
Source§

fn is_empty(&self) -> bool

Check if the leaf is empty.
Source§

fn is_full(&self) -> bool

Check if the leaf is full.
Source§

impl<P: LeafPolicy> Send for LeafNode15<P>

Source§

impl<P: LeafPolicy> Sync for LeafNode15<P>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.