pub enum Packed4Cow<'a, T>where
T: Packable4,{
Borrowed(Packed4Slice<'a, T>),
Owned(Packed4Vec<T>),
}Expand description
A Clone-on-Write (CoW) container for packed 4-bit elements.
Promotes zero-copy operations by borrowing packed byte buffers as read-only
Packed4Slices, only upgrading to an owned Packed4Vec when mutation is requested.
Variants§
Borrowed(Packed4Slice<'a, T>)
Borrowed read-only packed slice view.
Owned(Packed4Vec<T>)
Owned packed vector.
Implementations§
Source§impl<'a, T> Packed4Cow<'a, T>where
T: Packable4,
impl<'a, T> Packed4Cow<'a, T>where
T: Packable4,
Sourcepub fn borrowed(view: Packed4Slice<'a, T>) -> Packed4Cow<'a, T>
pub fn borrowed(view: Packed4Slice<'a, T>) -> Packed4Cow<'a, T>
Creates a borrowed Packed4Cow wrapping a Packed4Slice.
Sourcepub fn owned(vec: Packed4Vec<T>) -> Packed4Cow<'a, T>
pub fn owned(vec: Packed4Vec<T>) -> Packed4Cow<'a, T>
Creates an owned Packed4Cow wrapping a Packed4Vec.
Sourcepub fn is_borrowed(&self) -> bool
pub fn is_borrowed(&self) -> bool
Returns true when this container is borrowing caller-owned packed bytes.
Sourcepub fn from_packed_slice(
data: &'a [u8],
len: usize,
) -> Option<Packed4Cow<'a, T>>
pub fn from_packed_slice( data: &'a [u8], len: usize, ) -> Option<Packed4Cow<'a, T>>
Creates a borrowed Packed4Cow from a byte slice and logical length.
Returns None if the byte slice is too small for the requested length.
Sourcepub fn as_view(&self) -> Packed4Slice<'_, T>
pub fn as_view(&self) -> Packed4Slice<'_, T>
Obtains a read-only view of the packed slice.
Sourcepub fn to_mut(&mut self) -> &mut Packed4Vec<T>
pub fn to_mut(&mut self) -> &mut Packed4Vec<T>
Upgrades the container to the Owned variant and returns a mutable reference to the underlying Packed4Vec.
Subsequent calls are free (no reallocation).
Sourcepub fn into_owned(self) -> Packed4Vec<T>
pub fn into_owned(self) -> Packed4Vec<T>
Convert into the owned Packed4Vec type, allocating if borrowed.
Sourcepub fn set(&mut self, index: usize, val: T)
pub fn set(&mut self, index: usize, val: T)
Sets an element at the given logical index, upgrading to owned if currently borrowed.
Sourcepub fn sub_slice(&self, range: Range<usize>) -> Option<Packed4Cow<'_, T>>
pub fn sub_slice(&self, range: Range<usize>) -> Option<Packed4Cow<'_, T>>
Attempts to create a zero-copy sub-slice of the packed Clone-on-Write container.
Returns Some(Packed4Cow::Borrowed) if the sub-slice range starts at an even logical index
(aligned to byte boundaries), otherwise returns None.
Trait Implementations§
Source§impl<T> Archive for Packed4Cow<'_, T>where
T: Packable4,
impl<T> Archive for Packed4Cow<'_, T>where
T: Packable4,
Source§type Archived = ArchivedPacked4Cow<T>
type Archived = ArchivedPacked4Cow<T>
Source§type Resolver = Packed4CowResolver
type Resolver = Packed4CowResolver
Source§fn resolve(
&self,
resolver: <Packed4Cow<'_, T> as Archive>::Resolver,
out: Place<<Packed4Cow<'_, T> as Archive>::Archived>,
)
fn resolve( &self, resolver: <Packed4Cow<'_, T> as Archive>::Resolver, out: Place<<Packed4Cow<'_, T> as Archive>::Archived>, )
Source§const COPY_OPTIMIZATION: CopyOptimization<Self> = _
const COPY_OPTIMIZATION: CopyOptimization<Self> = _
serialize. Read moreSource§impl<'a, T> Clone for Packed4Cow<'a, T>
impl<'a, T> Clone for Packed4Cow<'a, T>
Source§fn clone(&self) -> Packed4Cow<'a, T>
fn clone(&self) -> Packed4Cow<'a, T>
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<'a, T> Debug for Packed4Cow<'a, T>
impl<'a, T> Debug for Packed4Cow<'a, T>
Source§impl<T> Default for Packed4Cow<'static, T>where
T: Packable4,
impl<T> Default for Packed4Cow<'static, T>where
T: Packable4,
Source§fn default() -> Packed4Cow<'static, T>
fn default() -> Packed4Cow<'static, T>
Source§impl<T, D> Deserialize<Packed4Cow<'static, T>, D> for ArchivedPacked4Cow<T>
impl<T, D> Deserialize<Packed4Cow<'static, T>, D> for ArchivedPacked4Cow<T>
Source§fn deserialize(
&self,
_deserializer: &mut D,
) -> Result<Packed4Cow<'static, T>, <D as Fallible>::Error>
fn deserialize( &self, _deserializer: &mut D, ) -> Result<Packed4Cow<'static, T>, <D as Fallible>::Error>
impl<'a, T> Eq for Packed4Cow<'a, T>
Source§impl<'a, T> IntoIterator for &'a Packed4Cow<'a, T>where
T: Packable4,
impl<'a, T> IntoIterator for &'a Packed4Cow<'a, T>where
T: Packable4,
Source§type IntoIter = Packed4Iter<'a, T>
type IntoIter = Packed4Iter<'a, T>
Source§fn into_iter(self) -> <&'a Packed4Cow<'a, T> as IntoIterator>::IntoIter
fn into_iter(self) -> <&'a Packed4Cow<'a, T> as IntoIterator>::IntoIter
Source§impl<'a, T> IntoIterator for Packed4Cow<'a, T>where
T: Packable4,
impl<'a, T> IntoIterator for Packed4Cow<'a, T>where
T: Packable4,
Source§impl<'a, T: Packable4> Packed4CowExt<'a, T> for Packed4Cow<'a, T>
impl<'a, T: Packable4> Packed4CowExt<'a, T> for Packed4Cow<'a, T>
Source§impl<'a, T> PartialEq for Packed4Cow<'a, T>
impl<'a, T> PartialEq for Packed4Cow<'a, T>
Source§impl<T, S> Serialize<S> for Packed4Cow<'_, T>
impl<T, S> Serialize<S> for Packed4Cow<'_, T>
impl<'a, T> StructuralPartialEq for Packed4Cow<'a, T>
Auto Trait Implementations§
impl<'a, T> Freeze for Packed4Cow<'a, T>
impl<'a, T> RefUnwindSafe for Packed4Cow<'a, T>where
T: RefUnwindSafe,
impl<'a, T> Send for Packed4Cow<'a, T>where
T: Send,
impl<'a, T> Sync for Packed4Cow<'a, T>where
T: Sync,
impl<'a, T> Unpin for Packed4Cow<'a, T>where
T: Unpin,
impl<'a, T> UnsafeUnpin for Packed4Cow<'a, T>
impl<'a, T> UnwindSafe for Packed4Cow<'a, T>where
T: UnwindSafe,
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Source§impl<T> ArchiveUnsized for Twhere
T: Archive,
impl<T> ArchiveUnsized for Twhere
T: Archive,
Source§type Archived = <T as Archive>::Archived
type Archived = <T as Archive>::Archived
Archive, it may be
unsized. Read moreSource§fn archived_metadata(
&self,
) -> <<T as ArchiveUnsized>::Archived as ArchivePointee>::ArchivedMetadata
fn archived_metadata( &self, ) -> <<T as ArchiveUnsized>::Archived as ArchivePointee>::ArchivedMetadata
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out indicating that a T is niched.