Struct kernel::utilities::StaticRef

source ·
pub struct StaticRef<T> { /* private fields */ }
Expand description

A pointer to statically allocated mutable data such as memory mapped I/O registers.

This is a simple wrapper around a raw pointer that encapsulates an unsafe dereference in a safe manner. It serve the role of creating a &'static T given a raw address and acts similarly to extern definitions, except StaticRef is subject to module and crate boundaries, while extern definitions can be imported anywhere.

Because this defers the actual dereference, this can be put in a const, whereas const I32_REF: &'static i32 = unsafe { &*(0x1000 as *const i32) }; will always fail to compile since 0x1000 doesn’t have an allocation at compile time, even if it’s known to be a valid MMIO address.

Implementations§

source§

impl<T> StaticRef<T>

source

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

Create a new StaticRef from a raw pointer

§Safety
  • ptr must be aligned, non-null, and dereferencable as T.
  • *ptr must be valid for the program duration.

Trait Implementations§

source§

impl<T> Clone for StaticRef<T>

source§

fn clone(&self) -> Self

Returns a copy 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> Debug for StaticRef<T>

source§

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

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

impl<T> Deref for StaticRef<T>

§

type Target = T

The resulting type after dereferencing.
source§

fn deref(&self) -> &T

Dereferences the value.
source§

impl<T> Copy for StaticRef<T>

Auto Trait Implementations§

§

impl<T> Freeze for StaticRef<T>

§

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

§

impl<T> !Send for StaticRef<T>

§

impl<T> !Sync for StaticRef<T>

§

impl<T> Unpin for StaticRef<T>

§

impl<T> UnwindSafe for StaticRef<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§

default unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
source§

impl<T> CloneToUninit for T
where T: Copy,

source§

unsafe fn clone_to_uninit(&self, dst: *mut T)

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

§

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>,

§

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.