Struct tagged_pointer::TaggedPtr
source · [−]#[repr(transparent)]pub struct TaggedPtr<T, const BITS: usize>(_);Expand description
A tagged pointer: a space-efficient representation of a pointer and integer tag.
This type stores a pointer and an integer tag without taking up more space than a normal pointer (unless the fallback implementation is used; see the crate documentation).
The tagged pointer conceptually holds a NonNull<T> and a
certain number of bits of an integer tag.
BITS specifies how many bits are used for the tag. The alignment of T
must be large enough to store this many bits; see Self::new.
Implementations
sourceimpl<T, const BITS: usize> TaggedPtr<T, BITS>
impl<T, const BITS: usize> TaggedPtr<T, BITS>
sourcepub fn new(ptr: NonNull<T>, tag: usize) -> Self
pub fn new(ptr: NonNull<T>, tag: usize) -> Self
Creates a new tagged pointer. Only the lower BITS bits of tag are
stored.
Panics
This function panics if the alignment of T is less than 2 to the
power of BITS. This ensures that all properly aligned pointers to T
will be aligned enough to store the specified number of bits of the
tag.
ptr should be “dereferencable” in the sense defined by
core::ptr. If it is not, this function or methods
of TaggedPtr may panic.
It is recommended that ptr be properly aligned (i.e., aligned to at
least mem::align_of::<T>()), but it may have a
smaller alignment. However, if its alignment is not at least
2 to the power of BITS, this function may panic.
sourcepub fn get(self) -> (NonNull<T>, usize)
pub fn get(self) -> (NonNull<T>, usize)
Gets the pointer and tag stored by the tagged pointer. If you need
both the pointer and tag, this method may be more efficient than
calling Self::ptr and Self::tag separately.
Panics
If the pointer provided to Self::new wasn’t
“dereferencable”, this method may panic.
sourcepub fn ptr(self) -> NonNull<T>
pub fn ptr(self) -> NonNull<T>
Gets the pointer stored by the tagged pointer, without the tag.
Equivalent to self.get().0.
Panics
If the pointer provided to Self::new wasn’t
“dereferencable”, this method may panic.
sourcepub fn tag(self) -> usize
pub fn tag(self) -> usize
Gets the tag stored by the tagged pointer. Equivalent to
self.get().1.
Panics
If the pointer provided to Self::new wasn’t
“dereferencable”, this method may panic.
Trait Implementations
sourceimpl<T, const BITS: usize> Ord for TaggedPtr<T, BITS>
impl<T, const BITS: usize> Ord for TaggedPtr<T, BITS>
1.21.0 · sourcefn max(self, other: Self) -> Self
fn max(self, other: Self) -> Self
Compares and returns the maximum of two values. Read more
1.21.0 · sourcefn min(self, other: Self) -> Self
fn min(self, other: Self) -> Self
Compares and returns the minimum of two values. Read more
1.50.0 · sourcefn clamp(self, min: Self, max: Self) -> Selfwhere
Self: PartialOrd<Self>,
fn clamp(self, min: Self, max: Self) -> Selfwhere
Self: PartialOrd<Self>,
Restrict a value to a certain interval. Read more
sourceimpl<T, const BITS: usize> PartialEq<TaggedPtr<T, BITS>> for TaggedPtr<T, BITS>
impl<T, const BITS: usize> PartialEq<TaggedPtr<T, BITS>> for TaggedPtr<T, BITS>
sourceimpl<T, const BITS: usize> PartialOrd<TaggedPtr<T, BITS>> for TaggedPtr<T, BITS>
impl<T, const BITS: usize> PartialOrd<TaggedPtr<T, BITS>> for TaggedPtr<T, BITS>
sourcefn partial_cmp(&self, other: &Self) -> Option<Ordering>
fn partial_cmp(&self, other: &Self) -> Option<Ordering>
This method returns an ordering between self and other values if one exists. Read more
1.0.0 · sourcefn lt(&self, other: &Rhs) -> bool
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · sourcefn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self and other) and is used by the <=
operator. Read more
impl<T, const BITS: usize> Copy for TaggedPtr<T, BITS>
impl<T, const BITS: usize> Eq for TaggedPtr<T, BITS>
Auto Trait Implementations
impl<T, const BITS: usize> RefUnwindSafe for TaggedPtr<T, BITS>where
T: RefUnwindSafe,
impl<T, const BITS: usize> !Send for TaggedPtr<T, BITS>
impl<T, const BITS: usize> !Sync for TaggedPtr<T, BITS>
impl<T, const BITS: usize> Unpin for TaggedPtr<T, BITS>
impl<T, const BITS: usize> UnwindSafe for TaggedPtr<T, BITS>where
T: RefUnwindSafe,
Blanket Implementations
sourceimpl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more