Skip to content

Commit c7807cd

Browse files
committed
Optimize setting the slice to empty in slice Iter
This avoids generating extra instructions that needlessly modify the slice's pointer
1 parent 16e6f25 commit c7807cd

File tree

1 file changed

+8
-8
lines changed

1 file changed

+8
-8
lines changed

library/core/src/slice/iter.rs

+8-8
Original file line numberDiff line numberDiff line change
@@ -1429,7 +1429,7 @@ impl<'a, T> DoubleEndedIterator for Windows<'a, T> {
14291429
fn nth_back(&mut self, n: usize) -> Option<Self::Item> {
14301430
let (end, overflow) = self.v.len().overflowing_sub(n);
14311431
if end < self.size.get() || overflow {
1432-
self.v = &[];
1432+
self.v = &self.v[..0];
14331433
None
14341434
} else {
14351435
let ret = &self.v[end - self.size.get()..end];
@@ -1609,7 +1609,7 @@ impl<'a, T> DoubleEndedIterator for Chunks<'a, T> {
16091609
fn nth_back(&mut self, n: usize) -> Option<Self::Item> {
16101610
let len = self.len();
16111611
if n >= len {
1612-
self.v = &[];
1612+
self.v = &self.v[..0];
16131613
None
16141614
} else {
16151615
let start = (len - 1 - n) * self.chunk_size;
@@ -1933,7 +1933,7 @@ impl<'a, T> Iterator for ChunksExact<'a, T> {
19331933
fn nth(&mut self, n: usize) -> Option<Self::Item> {
19341934
let (start, overflow) = n.overflowing_mul(self.chunk_size);
19351935
if start >= self.v.len() || overflow {
1936-
self.v = &[];
1936+
self.v = &self.v[..0];
19371937
None
19381938
} else {
19391939
let (_, snd) = self.v.split_at(start);
@@ -1971,7 +1971,7 @@ impl<'a, T> DoubleEndedIterator for ChunksExact<'a, T> {
19711971
fn nth_back(&mut self, n: usize) -> Option<Self::Item> {
19721972
let len = self.len();
19731973
if n >= len {
1974-
self.v = &[];
1974+
self.v = &self.v[..0];
19751975
None
19761976
} else {
19771977
let start = (len - 1 - n) * self.chunk_size;
@@ -2635,7 +2635,7 @@ impl<'a, T> Iterator for RChunks<'a, T> {
26352635
fn nth(&mut self, n: usize) -> Option<Self::Item> {
26362636
let (end, overflow) = n.overflowing_mul(self.chunk_size);
26372637
if end >= self.v.len() || overflow {
2638-
self.v = &[];
2638+
self.v = &self.v[..0];
26392639
None
26402640
} else {
26412641
// Can't underflow because of the check above
@@ -2692,7 +2692,7 @@ impl<'a, T> DoubleEndedIterator for RChunks<'a, T> {
26922692
fn nth_back(&mut self, n: usize) -> Option<Self::Item> {
26932693
let len = self.len();
26942694
if n >= len {
2695-
self.v = &[];
2695+
self.v = &self.v[..0];
26962696
None
26972697
} else {
26982698
// can't underflow because `n < len`
@@ -3019,7 +3019,7 @@ impl<'a, T> Iterator for RChunksExact<'a, T> {
30193019
fn nth(&mut self, n: usize) -> Option<Self::Item> {
30203020
let (end, overflow) = n.overflowing_mul(self.chunk_size);
30213021
if end >= self.v.len() || overflow {
3022-
self.v = &[];
3022+
self.v = &self.v[..0];
30233023
None
30243024
} else {
30253025
let (fst, _) = self.v.split_at(self.v.len() - end);
@@ -3058,7 +3058,7 @@ impl<'a, T> DoubleEndedIterator for RChunksExact<'a, T> {
30583058
fn nth_back(&mut self, n: usize) -> Option<Self::Item> {
30593059
let len = self.len();
30603060
if n >= len {
3061-
self.v = &[];
3061+
self.v = &self.v[..0];
30623062
None
30633063
} else {
30643064
// now that we know that `n` corresponds to a chunk,

0 commit comments

Comments
 (0)