about summary refs log tree commit diff
path: root/src/libcore
diff options
context:
space:
mode:
authorUlrik Sverdrup <bluss@users.noreply.github.com>2016-04-21 21:35:39 +0200
committerUlrik Sverdrup <bluss@users.noreply.github.com>2016-06-14 15:51:49 +0200
commit592eaa5bb39eef95a06ba9ec75c708592287da07 (patch)
tree7ff226b49709b319103bc34fb5305fb72996a0c3 /src/libcore
parentf8d2fdf02b09c594534cc19a47162aed6eaa0b1c (diff)
downloadrust-592eaa5bb39eef95a06ba9ec75c708592287da07.tar.gz
rust-592eaa5bb39eef95a06ba9ec75c708592287da07.zip
specialize zip: Implement TrustedRandomAccess for slice iterators
Diffstat (limited to 'src/libcore')
-rw-r--r--src/libcore/slice.rs15
1 files changed, 15 insertions, 0 deletions
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<T> {
@@ -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)
+    }
+}