PtrMut

Struct PtrMut 

Source
pub struct PtrMut<'mem> { /* private fields */ }
Expand description

A type-erased, mutable wide pointer to an initialized value.

Like PtrMut, but for unsized types where metadata is needed. Provides mutable access to the underlying object, whose borrow is tracked by lifetime 'mem.

Implementations§

Source§

impl<'mem> PtrMut<'mem>

Source

pub const fn new<T: ?Sized>(ptr: NonNull<T>) -> Self

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

§Arguments
  • ptr - Raw mutable pointer to the object. Can be a pointer to a DST (e.g., slice, trait object).
§Panics

Panics if a thin pointer is provided where a wide pointer is expected.

Source

pub const fn as_byte_ptr(self) -> *const u8

Gets the underlying raw pointer

Source

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

Gets the underlying raw pointer as mutable

Source

pub const fn as_uninit(self) -> PtrUninit<'mem>

Assumes the pointer is initialized and returns an Opaque pointer

§Safety

The pointer must actually be pointing to initialized memory of the correct type.

Source

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

Gets the underlying raw pointer as a pointer of type T

§Safety

Must be called with the original type T that was used to create this pointer

Source

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

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

§Safety

T must be the actual underlying type. You’re downcasting with no guardrails.

Source

pub const unsafe fn get<'borrow: 'mem, T>(self) -> &'borrow T

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

§Safety

T must be the actual underlying type. You’re downcasting with no guardrails. You must respect AXM (aliasing xor mutability). Holding onto the borrow while calling as_mut is UB.

Basically this is UB land. Careful.

Source

pub const fn as_const<'borrow: 'mem>(self) -> PtrConst<'borrow>

Make a const ptr out of this mut ptr

Source

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

Exposes core::ptr::read

§Safety

T must be the actual underlying type of the pointed-to memory. The memory must be properly initialized and aligned for type T.

Source

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

Exposes core::ptr::drop_in_place

§Safety

T must be the actual underlying type of the pointed-to memory. The memory must be properly initialized and aligned for type T. After calling this function, the memory should not be accessed again until it is properly reinitialized.

Source

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

Write a value to this location after dropping the existing value

§Safety
  • The pointer must be properly aligned for T and point to allocated memory that can be safely written to.
  • T must be the actual type of the object being pointed to
  • The memory must already be initialized to a valid T value

Trait Implementations§

Source§

impl<'mem> Clone for PtrMut<'mem>

Source§

fn clone(&self) -> PtrMut<'mem>

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<'mem, T: ?Sized> From<TypedPtrMut<'mem, T>> for PtrMut<'mem>

Source§

fn from(ptr: TypedPtrMut<'mem, T>) -> Self

Converts to this type from the input type.
Source§

impl<'mem> PartialEq for PtrMut<'mem>

Source§

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

Source§

impl<'mem> Eq for PtrMut<'mem>

Source§

impl<'mem> StructuralPartialEq for PtrMut<'mem>

Auto Trait Implementations§

§

impl<'mem> Freeze for PtrMut<'mem>

§

impl<'mem> RefUnwindSafe for PtrMut<'mem>

§

impl<'mem> !Send for PtrMut<'mem>

§

impl<'mem> !Sync for PtrMut<'mem>

§

impl<'mem> Unpin for PtrMut<'mem>

§

impl<'mem> !UnwindSafe for PtrMut<'mem>

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.