Introduce as_slice
method on std::vec::IntoIter
struct.
Similar to the `as_slice` method on `core::slice::Iter` struct.
This commit is contained in:
parent
ae77410350
commit
d099e30e48
3 changed files with 35 additions and 3 deletions
|
@ -1714,6 +1714,27 @@ pub struct IntoIter<T> {
|
||||||
end: *const T,
|
end: *const T,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<T> IntoIter<T> {
|
||||||
|
/// Returns the remaining items of this iterator as a slice.
|
||||||
|
///
|
||||||
|
/// # Examples
|
||||||
|
///
|
||||||
|
/// ```rust
|
||||||
|
/// # #![feature(vec_into_iter_as_slice)]
|
||||||
|
/// let vec = vec!['a', 'b', 'c'];
|
||||||
|
/// let mut into_iter = vec.into_iter();
|
||||||
|
/// assert_eq!(into_iter.as_slice(), &['a', 'b', 'c']);
|
||||||
|
/// let _ = into_iter.next().unwrap();
|
||||||
|
/// assert_eq!(into_iter.as_slice(), &['b', 'c']);
|
||||||
|
/// ```
|
||||||
|
#[unstable(feature = "vec_into_iter_as_slice", issue = "35601")]
|
||||||
|
pub fn as_slice(&self) -> &[T] {
|
||||||
|
unsafe {
|
||||||
|
slice::from_raw_parts(self.ptr, self.len())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
#[stable(feature = "rust1", since = "1.0.0")]
|
||||||
unsafe impl<T: Send> Send for IntoIter<T> {}
|
unsafe impl<T: Send> Send for IntoIter<T> {}
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
#[stable(feature = "rust1", since = "1.0.0")]
|
||||||
|
@ -1796,9 +1817,7 @@ impl<T> ExactSizeIterator for IntoIter<T> {}
|
||||||
#[stable(feature = "vec_into_iter_clone", since = "1.8.0")]
|
#[stable(feature = "vec_into_iter_clone", since = "1.8.0")]
|
||||||
impl<T: Clone> Clone for IntoIter<T> {
|
impl<T: Clone> Clone for IntoIter<T> {
|
||||||
fn clone(&self) -> IntoIter<T> {
|
fn clone(&self) -> IntoIter<T> {
|
||||||
unsafe {
|
self.as_slice().to_owned().into_iter()
|
||||||
slice::from_raw_parts(self.ptr, self.len()).to_owned().into_iter()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
#![feature(unboxed_closures)]
|
#![feature(unboxed_closures)]
|
||||||
#![feature(unicode)]
|
#![feature(unicode)]
|
||||||
#![feature(vec_deque_contains)]
|
#![feature(vec_deque_contains)]
|
||||||
|
#![feature(vec_into_iter_as_slice)]
|
||||||
|
|
||||||
extern crate collections;
|
extern crate collections;
|
||||||
extern crate test;
|
extern crate test;
|
||||||
|
|
|
@ -478,6 +478,18 @@ fn test_split_off() {
|
||||||
assert_eq!(vec2, [5, 6]);
|
assert_eq!(vec2, [5, 6]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_into_iter_as_slice() {
|
||||||
|
let vec = vec!['a', 'b', 'c'];
|
||||||
|
let mut into_iter = vec.into_iter();
|
||||||
|
assert_eq!(into_iter.as_slice(), &['a', 'b', 'c']);
|
||||||
|
let _ = into_iter.next().unwrap();
|
||||||
|
assert_eq!(into_iter.as_slice(), &['b', 'c']);
|
||||||
|
let _ = into_iter.next().unwrap();
|
||||||
|
let _ = into_iter.next().unwrap();
|
||||||
|
assert_eq!(into_iter.as_slice(), &[]);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_into_iter_count() {
|
fn test_into_iter_count() {
|
||||||
assert_eq!(vec![1, 2, 3].into_iter().count(), 3);
|
assert_eq!(vec![1, 2, 3].into_iter().count(), 3);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue