Merge pull request #104 from clarcharr/clone_into_iter
Implement Clone, Debug for IntoIter
This commit is contained in:
+24
@@ -748,6 +748,30 @@ impl<A: Array> Drop for IntoIter<A> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<A: Array> Clone for IntoIter<A>
|
||||
where
|
||||
A::Item: Clone,
|
||||
{
|
||||
fn clone(&self) -> IntoIter<A> {
|
||||
self.v[self.index.to_usize()..]
|
||||
.iter()
|
||||
.cloned()
|
||||
.collect::<ArrayVec<A>>()
|
||||
.into_iter()
|
||||
}
|
||||
}
|
||||
|
||||
impl<A: Array> fmt::Debug for IntoIter<A>
|
||||
where
|
||||
A::Item: fmt::Debug,
|
||||
{
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
f.debug_list()
|
||||
.entries(&self.v[self.index.to_usize()..])
|
||||
.finish()
|
||||
}
|
||||
}
|
||||
|
||||
/// A draining iterator for `ArrayVec`.
|
||||
pub struct Drain<'a, A>
|
||||
where A: Array,
|
||||
|
||||
@@ -55,6 +55,7 @@ fn test_drop() {
|
||||
|
||||
let flag = &Cell::new(0);
|
||||
|
||||
#[derive(Clone)]
|
||||
struct Bump<'a>(&'a Cell<i32>);
|
||||
|
||||
impl<'a> Drop for Bump<'a> {
|
||||
@@ -105,6 +106,24 @@ fn test_drop() {
|
||||
assert_eq!(flag.get(), 3);
|
||||
}
|
||||
|
||||
// test cloning into_iter
|
||||
flag.set(0);
|
||||
{
|
||||
let mut array = ArrayVec::<[_; 3]>::new();
|
||||
array.push(Bump(flag));
|
||||
array.push(Bump(flag));
|
||||
array.push(Bump(flag));
|
||||
let mut iter = array.into_iter();
|
||||
assert_eq!(flag.get(), 0);
|
||||
iter.next();
|
||||
assert_eq!(flag.get(), 1);
|
||||
let clone = iter.clone();
|
||||
assert_eq!(flag.get(), 1);
|
||||
drop(clone);
|
||||
assert_eq!(flag.get(), 3);
|
||||
drop(iter);
|
||||
assert_eq!(flag.get(), 5);
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
Reference in New Issue
Block a user