pub struct ArchiveEntry<'a, const KEY_LEN: usize> { /* private fields */ }Expand description
Insertion entry for archive-backed PATCHes (V = () only).
Holds a thin pointer into an archive’s bytes plus a borrow of
the Arc<dyn ArchiveOwner> that keeps those bytes alive. When
inserted via PATCH::insert_archive, the entry’s key becomes a
[Head::new_local_leaf] under a Branch whose owner matches; on
owner mismatch the leaf is automatically reified into a heap-
allocated Leaf<KEY_LEN, ()> so the result is owner-consistent.
The owner is borrowed (not owned) so the ingest hot loop pays
zero atomic ref-count traffic per trible — the only clones
happen lazily inside the receiving PATCH when a Branch actually
adopts the owner. The caller (typically a chunked-archive
decoder) keeps one Arc alive on the stack for the whole batch.
Only valid for V = () because archive bytes don’t carry a value
field — the constructor’s type parameter enforces this.
Implementations§
Source§impl<'a, const KEY_LEN: usize> ArchiveEntry<'a, KEY_LEN>
impl<'a, const KEY_LEN: usize> ArchiveEntry<'a, KEY_LEN>
Sourcepub unsafe fn new(
ptr: NonNull<[u8; KEY_LEN]>,
owner: &'a Arc<dyn ArchiveOwner>,
) -> Self
pub unsafe fn new( ptr: NonNull<[u8; KEY_LEN]>, owner: &'a Arc<dyn ArchiveOwner>, ) -> Self
Creates an ArchiveEntry referencing a [u8; KEY_LEN] trible
inside an archive’s bytes. Computes the siphash24 of the
trible’s bytes eagerly so the 6 covering indexes can share it.
§Safety
ptrmust remain valid for as long asowneris held.ptrmust be 16-byte aligned (so [Head::new_local_leaf]’s tagged-pointer encoding has room for theLocalLeaftag in the low 4 bits). Any[u8; 64]at an offset that’s a multiple of 16 from a 16-byte aligned base satisfies this.
Sourcepub fn owner(&self) -> &'a Arc<dyn ArchiveOwner>
pub fn owner(&self) -> &'a Arc<dyn ArchiveOwner>
Borrows the owner Arc without cloning.
Trait Implementations§
Source§impl<'a, const KEY_LEN: usize> Clone for ArchiveEntry<'a, KEY_LEN>
impl<'a, const KEY_LEN: usize> Clone for ArchiveEntry<'a, KEY_LEN>
impl<'a, const KEY_LEN: usize> Copy for ArchiveEntry<'a, KEY_LEN>
Auto Trait Implementations§
impl<'a, const KEY_LEN: usize> !RefUnwindSafe for ArchiveEntry<'a, KEY_LEN>
impl<'a, const KEY_LEN: usize> !Send for ArchiveEntry<'a, KEY_LEN>
impl<'a, const KEY_LEN: usize> !Sync for ArchiveEntry<'a, KEY_LEN>
impl<'a, const KEY_LEN: usize> !UnwindSafe for ArchiveEntry<'a, KEY_LEN>
impl<'a, const KEY_LEN: usize> Freeze for ArchiveEntry<'a, KEY_LEN>
impl<'a, const KEY_LEN: usize> Unpin for ArchiveEntry<'a, KEY_LEN>
impl<'a, const KEY_LEN: usize> UnsafeUnpin for ArchiveEntry<'a, KEY_LEN>
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more