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 @@ impl<'a, T> Iter<'a, T> {
|
||||
/// ```
|
||||
#[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 @@ iterator! {struct Iter -> *const T, &'a T, const, {/* no mut */}, {
|
||||
|
||||
#[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 @@ impl<T> Clone for Iter<'_, T> {
|
||||
|
||||
#[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 @@ impl<'a, T> IterMut<'a, 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 @@ impl<'a, T> IterMut<'a, 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…
x
Reference in New Issue
Block a user