/// A trait for adding some helper routines to pointers. pub(crate) trait Pointer { /// Returns the distance, in units of `T`, between `self` and `origin`. /// /// # Safety /// /// Same as `ptr::offset_from` in addition to `self >= origin`. unsafefn distance(self, origin: Self) -> usize;
/// Casts this pointer to `usize`. /// /// Callers should not convert the `usize` back to a pointer if at all /// possible. (And if you believe it's necessary, open an issue to discuss /// why. Otherwise, it has the potential to violate pointer provenance.) /// The purpose of this function is just to be able to do arithmetic, i.e., /// computing offsets or alignments. fn as_usize(self) -> usize;
}
impl<T> Pointer for *const T { unsafefn distance(self, origin: *const T) -> usize { // TODO: Replace with `ptr::sub_ptr` once stabilized.
usize::try_from(self.offset_from(origin)).unwrap_unchecked()
}
fn as_usize(self) -> usize { selfas usize
}
}
impl<T> Pointer for *mut T { unsafefn distance(self, origin: *mut T) -> usize {
(selfas *const T).distance(origin as *const T)
}
/// A trait for adding some helper routines to raw bytes. #[cfg(test)] pub(crate) trait Byte { /// Converts this byte to a `char` if it's ASCII. Otherwise panics. fn to_char(self) -> char;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.