Pointer

Struct Pointer 

Source
pub struct Pointer<T> { /* private fields */ }
Expand description

A pointer to some T in the GC heap.

§Safety

A Pointer<T> is a small step up in safety from a raw pointer. A valid Pointer<T> instance is a guarantee that:

  • The pointer points into the GC heap, within a GC-allocated page, and not on top of the PageHeader.

  • The pointer has the alignment required by the type and GC.

Note that Pointer<T> does not pin its referent like GcRef<T> does. Therefore, a Pointer<T> can still easily be made to dangle or point at uninitialized memory! The Pointer<T> type is not for general use (use GcRef<T> for that instead), only for GC internals. We have to make it pub so that #[derive(IntoHeap)] can generate code that uses it, but no one else should!

Implementations§

Source§

impl<T> Pointer<T>

Source

pub unsafe fn new(ptr: *const T) -> Pointer<T>

Construct a new Pointer<T> from a raw *const T.

§Safety

It is the responsibility of callers to ensure that the guarantees mentioned above hold true.

§Panics

Panics if the pointer is not aligned properly, or if it would clobber the GC’s internal PageHeader.

Source

pub fn is_null(&self) -> bool

Is this pointer null?

Source

pub unsafe fn as_ref(&self) -> &T

Get a reference to the pointed-to T instance.

§Safety

If a GC happens and reclaims the referent while the returned reference is in use, it will result in use-after-free.

If this pointer doesn’t point at a valid T instance, then all hell will break loose.

§Panics

Panics if the pointer is null.

Source

pub fn as_raw(&self) -> *const T

Get the underlying raw pointer.

Source

pub fn as_void(&self) -> *const ()

Get the underlying raw pointer as a *const ().

Source

pub fn as_usize(&self) -> usize

Get the underlying raw pointer as a usize.

Trait Implementations§

Source§

impl<T> Clone for Pointer<T>

Source§

fn clone(&self) -> Pointer<T>

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<T> Debug for Pointer<T>

Source§

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

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

impl<T> From<Pointer<T>> for UntypedPointer

Source§

fn from(p: Pointer<T>) -> UntypedPointer

Converts to this type from the input type.
Source§

impl<T> From<Pointer<T>> for usize

Source§

fn from(p: Pointer<T>) -> usize

Converts to this type from the input type.
Source§

impl<T: Hash> Hash for Pointer<T>

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl<T: Ord> Ord for Pointer<T>

Source§

fn cmp(&self, other: &Pointer<T>) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · Source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · Source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · Source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
Source§

impl<T> PartialEq for Pointer<T>

Source§

fn eq(&self, other: &Pointer<T>) -> 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<T: PartialOrd> PartialOrd for Pointer<T>

Source§

fn partial_cmp(&self, other: &Pointer<T>) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · Source§

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

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · Source§

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

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · Source§

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

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · Source§

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

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl<T> Copy for Pointer<T>

Source§

impl<T> Eq for Pointer<T>

Auto Trait Implementations§

§

impl<T> Freeze for Pointer<T>

§

impl<T> RefUnwindSafe for Pointer<T>
where T: RefUnwindSafe,

§

impl<T> !Send for Pointer<T>

§

impl<T> !Sync for Pointer<T>

§

impl<T> Unpin for Pointer<T>

§

impl<T> UnwindSafe for Pointer<T>
where T: RefUnwindSafe,

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.