about summary refs log tree commit diff
path: root/src/libcore
diff options
context:
space:
mode:
authorClar Fon <them@lightdark.xyz>2018-12-19 16:33:53 -0500
committerClar Fon <them@lightdark.xyz>2019-01-22 17:45:11 -0500
commit520e8b001ef7c49dcf1ad8f1f7817f2b16ad709b (patch)
treebb69ea14d459883aba43b80b9fad5bdc7c641296 /src/libcore
parent3c44e1f08553af4309d16ab098522e57a057fabc (diff)
downloadrust-520e8b001ef7c49dcf1ad8f1f7817f2b16ad709b.tar.gz
rust-520e8b001ef7c49dcf1ad8f1f7817f2b16ad709b.zip
Move TrustedRandomAccess into Zip module
Diffstat (limited to 'src/libcore')
-rw-r--r--src/libcore/iter/adapters/mod.rs2
-rw-r--r--src/libcore/iter/adapters/zip.rs18
-rw-r--r--src/libcore/iter/mod.rs1
-rw-r--r--src/libcore/lib.rs1
-rw-r--r--src/libcore/slice/mod.rs1
-rw-r--r--src/libcore/str/mod.rs3
6 files changed, 20 insertions, 6 deletions
diff --git a/src/libcore/iter/adapters/mod.rs b/src/libcore/iter/adapters/mod.rs
index b0faded8871..f2bedf390e3 100644
--- a/src/libcore/iter/adapters/mod.rs
+++ b/src/libcore/iter/adapters/mod.rs
@@ -1,6 +1,5 @@
 use cmp;
 use fmt;
-use iter_private::TrustedRandomAccess;
 use ops::Try;
 use usize;
 use intrinsics;
@@ -11,6 +10,7 @@ mod zip;
 
 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.
 ///
diff --git a/src/libcore/iter/adapters/zip.rs b/src/libcore/iter/adapters/zip.rs
index d2937f5d3e1..6a0a7d8b12c 100644
--- a/src/libcore/iter/adapters/zip.rs
+++ b/src/libcore/iter/adapters/zip.rs
@@ -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;
+}
diff --git a/src/libcore/iter/mod.rs b/src/libcore/iter/mod.rs
index 6dc7469998c..1f390d7e0a9 100644
--- a/src/libcore/iter/mod.rs
+++ b/src/libcore/iter/mod.rs
@@ -354,6 +354,7 @@ pub use self::adapters::Flatten;
 pub use self::adapters::Copied;
 
 use self::adapters::{flatten_compat, ChainState, ZipImpl};
+pub(crate) use self::adapters::TrustedRandomAccess;
 
 mod range;
 mod sources;
diff --git a/src/libcore/lib.rs b/src/libcore/lib.rs
index df32cfa3373..c8cd72371e7 100644
--- a/src/libcore/lib.rs
+++ b/src/libcore/lib.rs
@@ -219,7 +219,6 @@ pub mod task;
 pub mod alloc;
 
 // note: does not need to be public
-mod iter_private;
 mod tuple;
 mod unit;
 
diff --git a/src/libcore/slice/mod.rs b/src/libcore/slice/mod.rs
index 9f9515e6d9b..d062da0c247 100644
--- a/src/libcore/slice/mod.rs
+++ b/src/libcore/slice/mod.rs
@@ -34,7 +34,6 @@ use result::Result::{Ok, Err};
 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")]
diff --git a/src/libcore/str/mod.rs b/src/libcore/str/mod.rs
index 1ee8b7735c1..ac920185636 100644
--- a/src/libcore/str/mod.rs
+++ b/src/libcore/str/mod.rs
@@ -9,8 +9,7 @@ use self::pattern::{Searcher, ReverseSearcher, DoubleEndedSearcher};
 
 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;