TaggedPtr

Struct TaggedPtr 

Source
pub struct TaggedPtr(/* private fields */);
Expand description

A pointer that uses the high bit (bit 63) as a tag to indicate wide vs thin.

  • Bit 63 = 0: thin pointer (sized type, no metadata needed)
  • Bit 63 = 1: wide pointer (unsized type, has metadata)

This works because user-space addresses on 64-bit Linux/macOS/Windows never use bit 63 (they’re limited to 48-57 bits).

Implementations§

Source§

impl TaggedPtr

Source

pub const fn thin(ptr: *mut u8) -> Self

Create a tagged pointer for a thin (sized) type.

Source

pub fn wide(ptr: *mut u8) -> Self

Create a tagged pointer for a wide (unsized) type.

Source

pub fn is_wide(self) -> bool

Returns true if this is a wide pointer (has metadata).

Source

pub fn is_thin(self) -> bool

Returns true if this is a thin pointer (no metadata).

Source

pub fn as_ptr(self) -> *mut u8

Returns the actual data pointer with the tag bit cleared.

Source

pub const fn raw(self) -> *mut u8

Returns the raw tagged value (for debugging/testing).

Source

pub unsafe fn with_offset(self, offset: usize) -> Self

Create a new TaggedPtr with an offset added, preserving the tag.

§Safety

The offset must be within bounds of the allocation.

Trait Implementations§

Source§

impl Clone for TaggedPtr

Source§

fn clone(&self) -> TaggedPtr

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for TaggedPtr

Source§

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

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

impl PartialEq for TaggedPtr

Source§

fn eq(&self, other: &TaggedPtr) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Copy for TaggedPtr

Source§

impl Eq for TaggedPtr

Source§

impl StructuralPartialEq for TaggedPtr

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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.