pub struct RawRelPtr<O> { /* private fields */ }
Expand description
An untyped pointer which resolves relative to its position in memory.
This is the most fundamental building block in rkyv. It allows the construction and use of pointers that can be safely relocated as long as the source and target are moved together. This is what allows memory to be moved from disk into memory and accessed without decoding.
Regular pointers are absolute, meaning that the pointee can be moved without invalidating the pointer. However, the target cannot be moved or the pointer is invalidated.
Relative pointers are relative, meaning that the pointee can be moved with the target without invalidating the pointer. However, if either the pointee or the target move independently, the pointer will be invalidated.
Implementations§
source§impl<O: Offset> RawRelPtr<O>
impl<O: Offset> RawRelPtr<O>
sourcepub unsafe fn manual_check_bytes<'a, C: Fallible + ?Sized>(
value: *const Self,
context: &mut C
) -> Result<&'a Self, Infallible>where
O: CheckBytes<C>,
pub unsafe fn manual_check_bytes<'a, C: Fallible + ?Sized>(
value: *const Self,
context: &mut C
) -> Result<&'a Self, Infallible>where
O: CheckBytes<C>,
Checks the bytes of the given raw relative pointer.
This is done rather than implementing CheckBytes
to force users to manually write their
CheckBytes
implementation since they need to also provide the ownership model of their
memory.
§Safety
The given pointer must be aligned and point to enough bytes to represent a RawRelPtr
.
source§impl<O: Offset> RawRelPtr<O>
impl<O: Offset> RawRelPtr<O>
sourcepub unsafe fn try_emplace(
from: usize,
to: usize,
out: *mut Self
) -> Result<(), OffsetError>
pub unsafe fn try_emplace( from: usize, to: usize, out: *mut Self ) -> Result<(), OffsetError>
Attempts to create a new RawRelPtr
in-place between the given from
and to
positions.
§Safety
out
must be located at positionfrom
to
must be a position within the archive
sourcepub unsafe fn emplace(from: usize, to: usize, out: *mut Self)
pub unsafe fn emplace(from: usize, to: usize, out: *mut Self)
Creates a new RawRelPtr
in-place between the given from
and to
positions.
§Safety
out
must be located at positionfrom
to
must be a position within the archive- The offset between
from
andto
must fit in anisize
and not exceed the offset storage
sourcepub fn as_ptr(&self) -> *const ()
pub fn as_ptr(&self) -> *const ()
Calculates the memory address being pointed to by this relative pointer.
sourcepub fn as_mut_ptr(&mut self) -> *mut ()
pub fn as_mut_ptr(&mut self) -> *mut ()
Returns an unsafe mutable pointer to the memory address being pointed to by this relative pointer.