Auto merge of #96711 - emilio:inline-slice-clone, r=nikic
slice: #[inline] a couple iterator methods. The one I care about and actually saw in the wild not getting inlined is clone(). We ended up doing a whole function call for something that just copies two pointers. I ended up marking as_slice / as_ref as well because make_slice is inline(always) itself, and is also the kind of think that can kill performance in hot loops if you expect it to get inlined. But happy to undo those.
This commit is contained in:
commit
0265a3e93b
@ -124,6 +124,7 @@ pub(super) fn new(slice: &'a [T]) -> Self {
|
||||
/// ```
|
||||
#[must_use]
|
||||
#[stable(feature = "iter_to_slice", since = "1.4.0")]
|
||||
#[inline]
|
||||
pub fn as_slice(&self) -> &'a [T] {
|
||||
self.make_slice()
|
||||
}
|
||||
@ -143,6 +144,7 @@ fn is_sorted_by<F>(self, mut compare: F) -> bool
|
||||
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
impl<T> Clone for Iter<'_, T> {
|
||||
#[inline]
|
||||
fn clone(&self) -> Self {
|
||||
Iter { ptr: self.ptr, end: self.end, _marker: self._marker }
|
||||
}
|
||||
@ -150,6 +152,7 @@ fn clone(&self) -> Self {
|
||||
|
||||
#[stable(feature = "slice_iter_as_ref", since = "1.13.0")]
|
||||
impl<T> AsRef<[T]> for Iter<'_, T> {
|
||||
#[inline]
|
||||
fn as_ref(&self) -> &[T] {
|
||||
self.as_slice()
|
||||
}
|
||||
@ -297,6 +300,7 @@ pub fn into_slice(self) -> &'a mut [T] {
|
||||
/// ```
|
||||
#[must_use]
|
||||
#[stable(feature = "slice_iter_mut_as_slice", since = "1.53.0")]
|
||||
#[inline]
|
||||
pub fn as_slice(&self) -> &[T] {
|
||||
self.make_slice()
|
||||
}
|
||||
@ -345,6 +349,7 @@ pub fn as_mut_slice(&mut self) -> &mut [T] {
|
||||
|
||||
#[stable(feature = "slice_iter_mut_as_slice", since = "1.53.0")]
|
||||
impl<T> AsRef<[T]> for IterMut<'_, T> {
|
||||
#[inline]
|
||||
fn as_ref(&self) -> &[T] {
|
||||
self.as_slice()
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user