From 592eaa5bb39eef95a06ba9ec75c708592287da07 Mon Sep 17 00:00:00 2001 From: Ulrik Sverdrup Date: Thu, 21 Apr 2016 21:35:39 +0200 Subject: specialize zip: Implement TrustedRandomAccess for slice iterators --- src/libcore/slice.rs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'src/libcore/slice.rs') diff --git a/src/libcore/slice.rs b/src/libcore/slice.rs index b6ae6fde1e3..727c26ba9ab 100644 --- a/src/libcore/slice.rs +++ b/src/libcore/slice.rs @@ -50,6 +50,7 @@ use result::Result::{Ok, Err}; use ptr; use mem; use marker::{Copy, Send, Sync, self}; +use iter_private::TrustedRandomAccess; #[repr(C)] struct Repr { @@ -1942,3 +1943,17 @@ macro_rules! impl_marker_for { impl_marker_for!(BytewiseEquality, u8 i8 u16 i16 u32 i32 u64 i64 usize isize char bool); + +#[doc(hidden)] +unsafe impl<'a, T> TrustedRandomAccess for Iter<'a, T> { + unsafe fn get_unchecked(&mut self, i: usize) -> &'a T { + &*self.ptr.offset(i as isize) + } +} + +#[doc(hidden)] +unsafe impl<'a, T> TrustedRandomAccess for IterMut<'a, T> { + unsafe fn get_unchecked(&mut self, i: usize) -> &'a mut T { + &mut *self.ptr.offset(i as isize) + } +} -- cgit 1.4.1-3-g733a5