implement nth_back for Windows
This commit is contained in:
parent
4837fb45ff
commit
739ba0417a
@ -3835,6 +3835,19 @@ fn next_back(&mut self) -> Option<&'a [T]> {
|
||||
ret
|
||||
}
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn nth_back(&mut self, n: usize) -> Option<Self::Item> {
|
||||
let (end, overflow) = self.v.len().overflowing_sub(n);
|
||||
if end < self.size || overflow {
|
||||
self.v = &[];
|
||||
None
|
||||
} else {
|
||||
let ret = &self.v[end-self.size..end];
|
||||
self.v = &self.v[..end-1];
|
||||
Some(ret)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
|
@ -578,6 +578,19 @@ fn test_windows_nth() {
|
||||
assert_eq!(c2.next(), None);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_windows_nth_back() {
|
||||
let v: &[i32] = &[0, 1, 2, 3, 4, 5];
|
||||
let mut c = v.windows(2);
|
||||
assert_eq!(c.nth_back(2).unwrap()[0], 2);
|
||||
assert_eq!(c.next_back().unwrap()[1], 2);
|
||||
|
||||
let v2: &[i32] = &[0, 1, 2, 3, 4];
|
||||
let mut c2 = v2.windows(4);
|
||||
assert_eq!(c2.nth_back(1).unwrap()[1], 1);
|
||||
assert_eq!(c2.next_back(), None);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_windows_last() {
|
||||
let v: &[i32] = &[0, 1, 2, 3, 4, 5];
|
||||
|
Loading…
Reference in New Issue
Block a user