Auto merge of #44790 - clarcharr:zip_bytes, r=sfackler
TrustedRandomAccess specialisation for Iterator::cloned when Item: Copy. This should fix #44424. It also provides a potential fix for more iterators using `Iterator::cloned`.
This commit is contained in:
commit
f22b9da1c3
|
@ -488,7 +488,7 @@ impl<'a, I, T: 'a> FusedIterator for Cloned<I>
|
|||
{}
|
||||
|
||||
#[doc(hidden)]
|
||||
unsafe impl<'a, I, T: 'a> TrustedRandomAccess for Cloned<I>
|
||||
default unsafe impl<'a, I, T: 'a> TrustedRandomAccess for Cloned<I>
|
||||
where I: TrustedRandomAccess<Item=&'a T>, T: Clone
|
||||
{
|
||||
unsafe fn get_unchecked(&mut self, i: usize) -> Self::Item {
|
||||
|
@ -499,6 +499,18 @@ unsafe impl<'a, I, T: 'a> TrustedRandomAccess for Cloned<I>
|
|||
fn may_have_side_effect() -> bool { true }
|
||||
}
|
||||
|
||||
#[doc(hidden)]
|
||||
unsafe impl<'a, I, T: 'a> TrustedRandomAccess for Cloned<I>
|
||||
where I: TrustedRandomAccess<Item=&'a T>, T: Copy
|
||||
{
|
||||
unsafe fn get_unchecked(&mut self, i: usize) -> Self::Item {
|
||||
*self.it.get_unchecked(i)
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn may_have_side_effect() -> bool { false }
|
||||
}
|
||||
|
||||
#[unstable(feature = "trusted_len", issue = "37572")]
|
||||
unsafe impl<'a, I, T: 'a> TrustedLen for Cloned<I>
|
||||
where I: TrustedLen<Item=&'a T>,
|
||||
|
|
|
@ -20,7 +20,8 @@ use self::pattern::{Searcher, ReverseSearcher, DoubleEndedSearcher};
|
|||
use char;
|
||||
use convert::TryFrom;
|
||||
use fmt;
|
||||
use iter::{Map, Cloned, FusedIterator};
|
||||
use iter::{Map, Cloned, FusedIterator, TrustedLen};
|
||||
use iter_private::TrustedRandomAccess;
|
||||
use slice::{self, SliceIndex};
|
||||
use mem;
|
||||
|
||||
|
@ -818,6 +819,17 @@ impl<'a> ExactSizeIterator for Bytes<'a> {
|
|||
#[unstable(feature = "fused", issue = "35602")]
|
||||
impl<'a> FusedIterator for Bytes<'a> {}
|
||||
|
||||
#[unstable(feature = "trusted_len", issue = "37572")]
|
||||
unsafe impl<'a> TrustedLen for Bytes<'a> {}
|
||||
|
||||
#[doc(hidden)]
|
||||
unsafe impl<'a> TrustedRandomAccess for Bytes<'a> {
|
||||
unsafe fn get_unchecked(&mut self, i: usize) -> u8 {
|
||||
self.0.get_unchecked(i)
|
||||
}
|
||||
fn may_have_side_effect() -> bool { false }
|
||||
}
|
||||
|
||||
/// This macro generates a Clone impl for string pattern API
|
||||
/// wrapper types of the form X<'a, P>
|
||||
macro_rules! derive_pattern_clone {
|
||||
|
|
Loading…
Reference in New Issue