From f21e8e1bea1e93aaa22e4d6baa3a490140977617 Mon Sep 17 00:00:00 2001 From: SoniEx2 Date: Sat, 7 May 2022 12:18:38 -0300 Subject: [Project] LtPtr "Checked" raw pointers for Rust. --- src/impls/slice.rs | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 src/impls/slice.rs (limited to 'src/impls/slice.rs') diff --git a/src/impls/slice.rs b/src/impls/slice.rs new file mode 100644 index 0000000..ff9b9de --- /dev/null +++ b/src/impls/slice.rs @@ -0,0 +1,40 @@ + +use crate::*; + +pub trait Sealed {} +impl Sealed for [T] {} + +impl AsLtPtr for [T] { + type Target = T; + fn as_lt_ptr(&self) -> ConstLtPtr<'_, T> { + unsafe { ConstLtPtr::from_raw(self.as_ptr()) } + } +} + +impl AsMutLtPtr for [T] { + fn as_mut_lt_ptr(&mut self) -> MutLtPtr<'_, T> { + unsafe { MutLtPtr::from_raw(self.as_mut_ptr()) } + } +} + +impl SliceExt for [T] { + fn as_lt_ptr_range(&self) -> Range> { + let Range { start, end } = self.as_ptr_range(); + unsafe { + Range { + start: ConstLtPtr::from_raw(start), + end: ConstLtPtr::from_raw(end), + } + } + } + + fn as_mut_lt_ptr_range(&mut self) -> Range> { + let Range { start, end } = self.as_mut_ptr_range(); + unsafe { + Range { + start: MutLtPtr::from_raw(start), + end: MutLtPtr::from_raw(end), + } + } + } +} -- cgit 1.4.1