Struct field_offset::FieldOffset [−][src]
#[repr(transparent)]pub struct FieldOffset<T, U, PinFlag = NotPinned>(_, _);
Expand description
Represents a pointer to a field of type U
within the type T
The PinFlag
parameter can be set to AllowPin
to enable the projection
from Pin<&T> to Pin<&U>
Implementations
impl<T, U> FieldOffset<T, U, NotPinned>
[src]
impl<T, U> FieldOffset<T, U, NotPinned>
[src]pub unsafe fn new<F: for<'a> FnOnce(*const T) -> *const U>(f: F) -> Self
[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 const unsafe fn new_from_offset(offset: usize) -> Self
[src]
pub const 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.
impl<T, U, PinFlag> FieldOffset<T, U, PinFlag>
[src]
impl<T, U, PinFlag> FieldOffset<T, U, PinFlag>
[src]pub fn apply_ptr_mut(self, x: *mut T) -> *mut U
[src]
pub fn apply_ptr_mut(self, x: *mut T) -> *mut U
[src]Apply the field offset to a native mutable pointer.
pub fn apply_mut<'a>(self, x: &'a mut T) -> &'a mut U
[src]
pub fn apply_mut<'a>(self, x: &'a mut T) -> &'a mut U
[src]Apply the field offset to a mutable reference.
pub const fn get_byte_offset(self) -> usize
[src]
pub const 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]
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]
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]
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]
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.
pub const unsafe fn as_pinned_projection(self) -> FieldOffset<T, U, AllowPin>
[src]
pub const unsafe fn as_pinned_projection(self) -> FieldOffset<T, U, AllowPin>
[src]Convert this offset to an offset that is allowed to go from Pin<&T>
to Pin<&U>
Safety
The Pin safety rules for projection must be respected. These rules are explained in the Pin documentation
pub const fn as_unpinned_projection(self) -> FieldOffset<T, U, NotPinned>
[src]
pub const fn as_unpinned_projection(self) -> FieldOffset<T, U, NotPinned>
[src]Remove the AllowPin flag
impl<T, U> FieldOffset<T, U, AllowPin>
[src]
impl<T, U> FieldOffset<T, U, AllowPin>
[src]pub const unsafe fn new_from_offset_pinned(offset: usize) -> Self
[src]
pub const unsafe fn new_from_offset_pinned(offset: usize) -> Self
[src]Construct a field offset directly from a byte offset, which can be projected from a pinned.
Safety
In addition to the safety rules of FieldOffset::new_from_offset, the projection
from Pin<&T>
to Pin<&U>
must also be allowed. The rules are explained in the
Pin documentation
pub fn apply_pin<'a>(self, x: Pin<&'a T>) -> Pin<&'a U>
[src]
pub fn apply_pin<'a>(self, x: Pin<&'a T>) -> Pin<&'a U>
[src]Apply the field offset to a pinned reference and return a pinned reference to the field
pub fn apply_pin_mut<'a>(self, x: Pin<&'a mut T>) -> Pin<&'a mut U>
[src]
pub fn apply_pin_mut<'a>(self, x: Pin<&'a mut T>) -> Pin<&'a mut U>
[src]Apply the field offset to a pinned mutable reference and return a pinned mutable reference to the field
Trait Implementations
impl<T, U, V> Add<FieldOffset<U, V, AllowPin>> for FieldOffset<T, U, AllowPin>
[src]
impl<T, U, V> Add<FieldOffset<U, V, AllowPin>> for FieldOffset<T, U, AllowPin>
[src]type Output = FieldOffset<T, V, AllowPin>
type Output = FieldOffset<T, V, AllowPin>
The resulting type after applying the +
operator.
fn add(self, other: FieldOffset<U, V, AllowPin>) -> FieldOffset<T, V, AllowPin>
[src]
fn add(self, other: FieldOffset<U, V, AllowPin>) -> FieldOffset<T, V, AllowPin>
[src]Performs the +
operation. Read more
impl<T, U, V> Add<FieldOffset<U, V, AllowPin>> for FieldOffset<T, U>
[src]
impl<T, U, V> Add<FieldOffset<U, V, AllowPin>> for FieldOffset<T, U>
[src]type Output = FieldOffset<T, V>
type Output = FieldOffset<T, V>
The resulting type after applying the +
operator.
fn add(self, other: FieldOffset<U, V, AllowPin>) -> FieldOffset<T, V>
[src]
fn add(self, other: FieldOffset<U, V, AllowPin>) -> FieldOffset<T, V>
[src]Performs the +
operation. Read more
impl<T, U, V> Add<FieldOffset<U, V, NotPinned>> for FieldOffset<T, U>
[src]
impl<T, U, V> Add<FieldOffset<U, V, NotPinned>> 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>
type Output = FieldOffset<T, V>
The resulting type after applying the +
operator.
fn add(self, other: FieldOffset<U, V>) -> FieldOffset<T, V>
[src]
fn add(self, other: FieldOffset<U, V>) -> FieldOffset<T, V>
[src]Performs the +
operation. Read more
impl<T, U, V> Add<FieldOffset<U, V, NotPinned>> for FieldOffset<T, U, AllowPin>
[src]
impl<T, U, V> Add<FieldOffset<U, V, NotPinned>> for FieldOffset<T, U, AllowPin>
[src]type Output = FieldOffset<T, V>
type Output = FieldOffset<T, V>
The resulting type after applying the +
operator.
fn add(self, other: FieldOffset<U, V>) -> FieldOffset<T, V>
[src]
fn add(self, other: FieldOffset<U, V>) -> FieldOffset<T, V>
[src]Performs the +
operation. Read more
impl<T, U, Flag> Clone for FieldOffset<T, U, Flag>
[src]
impl<T, U, Flag> Clone for FieldOffset<T, U, Flag>
[src]impl<T, U, Flag> Debug for FieldOffset<T, U, Flag>
[src]
impl<T, U, Flag> Debug for FieldOffset<T, U, Flag>
[src]The debug implementation prints the byte offset of the field in hexadecimal.
impl<T, U> From<FieldOffset<T, U, AllowPin>> for FieldOffset<T, U, NotPinned>
[src]
impl<T, U> From<FieldOffset<T, U, AllowPin>> for FieldOffset<T, U, NotPinned>
[src]fn from(other: FieldOffset<T, U, AllowPin>) -> Self
[src]
fn from(other: FieldOffset<T, U, AllowPin>) -> Self
[src]Performs the conversion.
impl<T, U, Flag> Copy for FieldOffset<T, U, Flag>
[src]
Auto Trait Implementations
impl<T, U, PinFlag> Send for FieldOffset<T, U, PinFlag> where
PinFlag: Send,
U: Send,
PinFlag: Send,
U: Send,
impl<T, U, PinFlag> Sync for FieldOffset<T, U, PinFlag> where
PinFlag: Sync,
U: Sync,
PinFlag: Sync,
U: Sync,
impl<T, U, PinFlag> Unpin for FieldOffset<T, U, PinFlag> where
PinFlag: Unpin,
U: Unpin,
PinFlag: Unpin,
U: Unpin,