Implement Extend and FromIterator
This commit is contained in:
+43
@@ -1,3 +1,4 @@
|
|||||||
|
use std::iter;
|
||||||
use std::mem;
|
use std::mem;
|
||||||
use std::ptr;
|
use std::ptr;
|
||||||
use std::ops::{
|
use std::ops::{
|
||||||
@@ -338,6 +339,31 @@ impl<A: Array> Drop for IntoIter<A> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Extend the **ArrayVec** with an iterator.
|
||||||
|
///
|
||||||
|
/// Does not extract more items than there is space for. No error
|
||||||
|
/// occurs if there are more iterator elements.
|
||||||
|
impl<A: Array> Extend<A::Item> for ArrayVec<A> {
|
||||||
|
fn extend<T: IntoIterator<Item=A::Item>>(&mut self, iter: T) {
|
||||||
|
let take = self.capacity() - self.len();
|
||||||
|
for elt in iter.into_iter().take(take) {
|
||||||
|
self.push(elt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Create an **ArrayVec** from an iterator.
|
||||||
|
///
|
||||||
|
/// Does not extract more items than there is space for. No error
|
||||||
|
/// occurs if there are more iterator elements.
|
||||||
|
impl<A: Array> iter::FromIterator<A::Item> for ArrayVec<A> {
|
||||||
|
fn from_iter<T: IntoIterator<Item=A::Item>>(iter: T) -> Self {
|
||||||
|
let mut array = ArrayVec::new();
|
||||||
|
array.extend(iter);
|
||||||
|
array
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_simple() {
|
fn test_simple() {
|
||||||
use std::ops::Add;
|
use std::ops::Add;
|
||||||
@@ -399,3 +425,20 @@ fn test_drop() {
|
|||||||
|
|
||||||
assert_eq!(flag.get(), 4);
|
assert_eq!(flag.get(), 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_extend() {
|
||||||
|
let mut range = 0..10;
|
||||||
|
|
||||||
|
let mut array: ArrayVec<[_; 5]> = range.by_ref().collect();
|
||||||
|
assert_eq!(&array[..], &[0, 1, 2, 3, 4]);
|
||||||
|
assert_eq!(range.next(), Some(5));
|
||||||
|
|
||||||
|
array.extend(range.by_ref());
|
||||||
|
assert_eq!(range.next(), Some(6));
|
||||||
|
|
||||||
|
let mut array: ArrayVec<[_; 10]> = (0..3).collect();
|
||||||
|
assert_eq!(&array[..], &[0, 1, 2]);
|
||||||
|
array.extend(3..5);
|
||||||
|
assert_eq!(&array[..], &[0, 1, 2, 3, 4]);
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user