PtrMut

Struct PtrMut 

Source
pub struct PtrMut { /* private fields */ }
Expand description

A type-erased mutable pointer (wide pointer) holding a data pointer and metadata.

This is the base pointer type that can do everything. Uses TaggedPtr for the data pointer, which uses the low bit to distinguish wide vs thin pointers.

No lifetime parameter - safety is the caller’s responsibility.

Implementations§

Source§

impl PtrMut

Source

pub fn new<T: ?Sized>(ptr: *mut T) -> Self

Creates a new mutable pointer from a raw pointer to a (potentially unsized) object.

Source

pub const fn new_sized<T: Sized>(ptr: *mut T) -> Self

Creates a new mutable pointer from a raw pointer to a sized type. This is const because sized types use thin pointers.

Source

pub fn is_wide(self) -> bool

Returns true if this is a wide pointer

Source

pub fn data_ptr(self) -> *mut u8

Returns the actual data pointer as *mut u8

Source

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

Creates a new pointer with an offset added to the data pointer. Preserves the wide/thin tag and metadata.

§Safety

Offset must be within bounds of the allocated memory.

Source

pub const fn as_const(self) -> PtrConst

Convert to a PtrConst.

Source

pub const fn as_uninit(self) -> PtrUninit

Convert to a PtrUninit.

Source

pub fn as_byte_ptr(self) -> *const u8

Returns the underlying raw pointer as a const byte pointer.

§Panics

Panics if this is a wide pointer.

Source

pub fn as_mut_byte_ptr(self) -> *mut u8

Returns the underlying raw pointer as a mutable byte pointer.

§Panics

Panics if this is a wide pointer.

Source

pub unsafe fn get<'a, T: ?Sized>(self) -> &'a T

Borrows the underlying object as a reference of type T.

§Safety
  • T must be the actual underlying type
  • The memory must be valid and initialized
  • No mutable references may exist
  • The returned reference must not outlive the actual data
Source

pub unsafe fn as_mut<'a, T: ?Sized>(self) -> &'a mut T

Borrows the underlying object as a mutable reference of type T.

§Safety
  • T must be the actual underlying type
  • The memory must be valid and initialized
  • Caller must have exclusive access
  • The returned reference must not outlive the actual data
Source

pub unsafe fn as_ptr<T: ?Sized>(self) -> *const T

Gets the underlying raw pointer as a const pointer of type T.

§Safety

Must be called with the original type T.

Source

pub unsafe fn as_mut_ptr<T: ?Sized>(self) -> *mut T

Gets the underlying raw pointer as a mutable pointer of type T.

§Safety

Must be called with the original type T.

Source

pub unsafe fn read<T>(self) -> T

Reads the value from the pointer.

§Safety
  • T must be the actual underlying type
  • The memory must be properly initialized
Source

pub unsafe fn drop_in_place<T: ?Sized>(self) -> PtrUninit

Drops the value in place and returns a PtrUninit.

§Safety
  • T must be the actual underlying type
  • The memory must be properly initialized
Source

pub unsafe fn replace<T>(self, value: T) -> Self

Writes a value after dropping the existing one.

§Safety
  • The pointer must be properly aligned
  • T must be the actual type
  • The memory must already be initialized
Source

pub unsafe fn field(self, offset: usize) -> PtrMut

Returns a pointer with the given offset added.

§Safety

Offset must be within bounds of the allocated memory.

Trait Implementations§

Source§

impl Clone for PtrMut

Source§

fn clone(&self) -> PtrMut

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 PtrMut

Source§

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

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

impl From<PtrMut> for PtrConst

Source§

fn from(p: PtrMut) -> Self

Converts to this type from the input type.
Source§

impl From<PtrMut> for PtrUninit

Source§

fn from(p: PtrMut) -> Self

Converts to this type from the input type.
Source§

impl PartialEq for PtrMut

Source§

fn eq(&self, other: &PtrMut) -> 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 PtrMut

Source§

impl Eq for PtrMut

Source§

impl StructuralPartialEq for PtrMut

Auto Trait Implementations§

§

impl Freeze for PtrMut

§

impl RefUnwindSafe for PtrMut

§

impl !Send for PtrMut

§

impl !Sync for PtrMut

§

impl Unpin for PtrMut

§

impl UnwindSafe for PtrMut

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.