]> git.lizzy.rs Git - rust.git/commitdiff
Move TrustedRandomAccess into Zip module
authorClar Fon <them@lightdark.xyz>
Wed, 19 Dec 2018 21:33:53 +0000 (16:33 -0500)
committerClar Fon <them@lightdark.xyz>
Tue, 22 Jan 2019 22:45:11 +0000 (17:45 -0500)
src/libcore/iter/adapters/mod.rs
src/libcore/iter/adapters/zip.rs
src/libcore/iter/mod.rs
src/libcore/lib.rs
src/libcore/slice/mod.rs
src/libcore/str/mod.rs

index b0faded8871306968d5a105e2f0741c0fab4745b..f2bedf390e3bcf4594da42fb7b626d0c36f204ae 100644 (file)
@@ -1,6 +1,5 @@
 use cmp;
 use fmt;
-use iter_private::TrustedRandomAccess;
 use ops::Try;
 use usize;
 use intrinsics;
@@ -11,6 +10,7 @@
 
 pub use self::zip::Zip;
 pub(super) use self::zip::ZipImpl;
+pub(crate) use self::zip::TrustedRandomAccess;
 
 /// A double-ended iterator with the direction inverted.
 ///
index d2937f5d3e1470c65f9bcaa58d07bb0129914400..6a0a7d8b12cdfa98467358d1ba29a6edc85e4af5 100644 (file)
@@ -1,5 +1,4 @@
 use cmp;
-use iter_private::TrustedRandomAccess;
 use super::super::{Iterator, DoubleEndedIterator, ExactSizeIterator, FusedIterator, TrustedLen};
 
 /// An iterator that iterates two other iterators simultaneously.
@@ -259,3 +258,20 @@ impl<A, B> FusedIterator for Zip<A, B>
 unsafe impl<A, B> TrustedLen for Zip<A, B>
     where A: TrustedLen, B: TrustedLen,
 {}
+
+/// An iterator whose items are random-accessible efficiently
+///
+/// # Safety
+///
+/// The iterator's .len() and size_hint() must be exact.
+/// `.len()` must be cheap to call.
+///
+/// .get_unchecked() must return distinct mutable references for distinct
+/// indices (if applicable), and must return a valid reference if index is in
+/// 0..self.len().
+pub(crate) unsafe trait TrustedRandomAccess : ExactSizeIterator {
+    unsafe fn get_unchecked(&mut self, i: usize) -> Self::Item;
+    /// Returns `true` if getting an iterator element may have
+    /// side effects. Remember to take inner iterators into account.
+    fn may_have_side_effect() -> bool;
+}
index 6dc7469998c02d899308e6d48d9651863d87bb85..1f390d7e0a925e7b74b2b99bff15b9abd1871cec 100644 (file)
 pub use self::adapters::Copied;
 
 use self::adapters::{flatten_compat, ChainState, ZipImpl};
+pub(crate) use self::adapters::TrustedRandomAccess;
 
 mod range;
 mod sources;
index df32cfa337313ab2eb2e1e796451bd070d24c8bf..c8cd72371e74880e17ec4e1c049e6c609480bae1 100644 (file)
 pub mod alloc;
 
 // note: does not need to be public
-mod iter_private;
 mod tuple;
 mod unit;
 
index 9f9515e6d9b7c4e372eee8beb937aac3dd89fc6b..d062da0c247adfb9ccb517365d94ddfb5ea4bc0c 100644 (file)
@@ -34,7 +34,6 @@
 use ptr;
 use mem;
 use marker::{Copy, Send, Sync, Sized, self};
-use iter_private::TrustedRandomAccess;
 
 #[unstable(feature = "slice_internals", issue = "0",
            reason = "exposed from core to be reused in std; use the memchr crate")]
index 1ee8b7735c17d19fcb85b82555dab48fcca784fe..ac920185636549b5eadc80504d1ddc2cb5f80c2a 100644 (file)
@@ -9,8 +9,7 @@
 
 use char;
 use fmt;
-use iter::{Map, Cloned, FusedIterator, TrustedLen, Filter};
-use iter_private::TrustedRandomAccess;
+use iter::{Map, Cloned, FusedIterator, TrustedLen, TrustedRandomAccess, Filter};
 use slice::{self, SliceIndex, Split as SliceSplit};
 use mem;