pub trait SizedPointerExt<T>: PointerExt<T> {
// Required methods
fn offset_logic(self, offset: Int) -> Self;
fn offset_logic_zero(self);
fn offset_logic_assoc(self, offset1: Int, offset2: Int);
fn sub_logic(self, rhs: Self) -> Int;
fn sub_logic_refl(self);
fn sub_offset_logic(self, offset: Int);
}Expand description
Extension methods for *const T where T: Sized.
Required Methods§
Sourcefn offset_logic(self, offset: Int) -> Self
fn offset_logic(self, offset: Int) -> Self
Pointer offset in logic
The current contract only describes the effect on addr_logic in the absence of overflow.
⚠
requires
self.addr_logic()@ + offset * size_of_logic::<T>() < usize::MAX@ensures
result.addr_logic()@ == self.addr_logic()@ + offset * size_of_logic::<T>()
Sourcefn offset_logic_zero(self)
fn offset_logic_zero(self)
Offset by zero is the identity
(law) ⚠
ensures
self.offset_logic(0) == selfSourcefn offset_logic_assoc(self, offset1: Int, offset2: Int)
fn offset_logic_assoc(self, offset1: Int, offset2: Int)
Offset is associative
(law) ⚠
ensures
self.offset_logic(offset1).offset_logic(offset2) == self.offset_logic(offset1 + offset2)
Sourcefn sub_logic(self, rhs: Self) -> Int
fn sub_logic(self, rhs: Self) -> Int
Pointer subtraction
Note: we don’t have ptr1 + (ptr2 - ptr1) == ptr2, because pointer subtraction discards provenance.
⚠
Sourcefn sub_logic_refl(self)
fn sub_logic_refl(self)
(law) ⚠
ensures
self.sub_logic(self) == 0Sourcefn sub_offset_logic(self, offset: Int)
fn sub_offset_logic(self, offset: Int)
(law) ⚠
ensures
self.offset_logic(offset).sub_logic(self) == offsetDyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.
Implementations on Foreign Types§
Source§impl<T> SizedPointerExt<T> for *const T
impl<T> SizedPointerExt<T> for *const T
Source§fn offset_logic(self, offset: Int) -> Self
fn offset_logic(self, offset: Int) -> Self
(opaque) ⚠
requires
self.addr_logic()@ + offset * size_of_logic::<T>() < usize::MAX@ensures
result.addr_logic()@ == self.addr_logic()@ + offset * size_of_logic::<T>()
Source§fn offset_logic_zero(self)
fn offset_logic_zero(self)
(law) ⚠
ensures
self.offset_logic(0) == selfSource§fn offset_logic_assoc(self, offset1: Int, offset2: Int)
fn offset_logic_assoc(self, offset1: Int, offset2: Int)
(law) ⚠
ensures
self.offset_logic(offset1).offset_logic(offset2) == self.offset_logic(offset1 + offset2)
Source§fn sub_logic_refl(self)
fn sub_logic_refl(self)
(law) ⚠
ensures
self.sub_logic(self) == 0Source§fn sub_offset_logic(self, offset: Int)
fn sub_offset_logic(self, offset: Int)
(law) ⚠
ensures
self.offset_logic(offset).sub_logic(self) == offset