[][src]Struct field_offset::FieldOffset

#[repr(transparent)]
pub struct FieldOffset<T, U>(_, _);

Represents a pointer to a field of type U within the type T

Methods

impl<T, U> FieldOffset<T, U>[src]

pub unsafe fn new<F: for<'a> FnOnce(*const T) -> *const U>(f: F) -> Self[src]

Construct a field offset via a lambda which returns a reference to the field in question.

Safety

The lambda must not dereference the provided pointer or access the inner value in any way as it may point to uninitialized memory.

For the returned FieldOffset to be safe to use, the returned pointer must be valid for any instance of T. For example, returning a pointer to a field from an enum with multiple variants will produce a FieldOffset which is unsafe to use.

pub unsafe fn new_from_offset(offset: usize) -> Self[src]

Construct a field offset directly from a byte offset.

Safety

For the returned FieldOffset to be safe to use, the field offset must be valid for any instance of T. For example, returning the offset to a field from an enum with multiple variants will produce a FieldOffset which is unsafe to use.

pub fn apply_ptr(self, x: *const T) -> *const U[src]

Apply the field offset to a native pointer.

pub fn apply_ptr_mut(self, x: *mut T) -> *mut U[src]

Apply the field offset to a native mutable pointer.

pub fn apply<'a>(self, x: &'a T) -> &'a U[src]

Apply the field offset to a reference.

pub fn apply_mut<'a>(self, x: &'a mut T) -> &'a mut U[src]

Apply the field offset to a mutable reference.

pub fn get_byte_offset(self) -> usize[src]

Get the raw byte offset for this field offset.

pub unsafe fn unapply_ptr(self, x: *const U) -> *const T[src]

Unapply the field offset to a native pointer.

Safety

Warning: very unsafe!

This applies a negative offset to a pointer. If the safety implications of this are not already clear to you, then do not use this method. Also be aware that Rust has stronger aliasing rules than other languages, so it may be UB to dereference the resulting pointer even if it points to a valid location, due to the presence of other live references.

pub unsafe fn unapply_ptr_mut(self, x: *mut U) -> *mut T[src]

Unapply the field offset to a native mutable pointer.

Safety

Warning: very unsafe!

This applies a negative offset to a pointer. If the safety implications of this are not already clear to you, then do not use this method. Also be aware that Rust has stronger aliasing rules than other languages, so it may be UB to dereference the resulting pointer even if it points to a valid location, due to the presence of other live references.

pub unsafe fn unapply<'a>(self, x: &'a U) -> &'a T[src]

Unapply the field offset to a reference.

Safety

Warning: very unsafe!

This applies a negative offset to a reference. If the safety implications of this are not already clear to you, then do not use this method. Also be aware that Rust has stronger aliasing rules than other languages, so this method may cause UB even if the resulting reference points to a valid location, due to the presence of other live references.

pub unsafe fn unapply_mut<'a>(self, x: &'a mut U) -> &'a mut T[src]

Unapply the field offset to a mutable reference.

Safety

Warning: very unsafe!

This applies a negative offset to a reference. If the safety implications of this are not already clear to you, then do not use this method. Also be aware that Rust has stronger aliasing rules than other languages, so this method may cause UB even if the resulting reference points to a valid location, due to the presence of other live references.

Trait Implementations

impl<T, U, V> Add<FieldOffset<U, V>> for FieldOffset<T, U>[src]

Allow chaining pointer-to-members.

Applying the resulting field offset is equivalent to applying the first field offset, then applying the second field offset.

The requirements on the generic type parameters ensure this is a safe operation.

type Output = FieldOffset<T, V>

The resulting type after applying the + operator.

impl<T, U> Clone for FieldOffset<T, U>[src]

impl<T, U> Copy for FieldOffset<T, U>[src]

impl<T, U> Debug for FieldOffset<T, U>[src]

The debug implementation prints the byte offset of the field in hexadecimal.

Auto Trait Implementations

impl<T, U> !RefUnwindSafe for FieldOffset<T, U>

impl<T, U> !Send for FieldOffset<T, U>

impl<T, U> !Sync for FieldOffset<T, U>

impl<T, U> !Unpin for FieldOffset<T, U>

impl<T, U> !UnwindSafe for FieldOffset<T, U>

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.