From 2a8dfc3f22e9f2482719fe89d8c8f2aabae8d754 Mon Sep 17 00:00:00 2001 From: Palmer Cox
Date: Sat, 30 Nov 2013 19:54:28 -0500
Subject: [PATCH] Implement DoubleEndedIterator for MutChunkIter.
---
src/libstd/vec.rs | 29 +++++++++++++++++++++++++++++
1 file changed, 29 insertions(+)
diff --git a/src/libstd/vec.rs b/src/libstd/vec.rs
index d7b1f1883141..45667bdad2ef 100644
--- a/src/libstd/vec.rs
+++ b/src/libstd/vec.rs
@@ -2611,6 +2611,23 @@ impl<'self, T> Iterator<&'self mut [T]> for MutChunkIter<'self, T> {
}
}
+impl<'self, T> DoubleEndedIterator<&'self mut [T]> for MutChunkIter<'self, T> {
+ #[inline]
+ fn next_back(&mut self) -> Option<&'self mut [T]> {
+ if self.remaining == 0 {
+ None
+ } else {
+ let remainder = self.remaining % self.chunk_size;
+ let sz = if remainder != 0 { remainder } else { self.chunk_size };
+ let tmp = util::replace(&mut self.v, &mut []);
+ let (head, tail) = tmp.mut_split(self.remaining - sz);
+ self.v = head;
+ self.remaining -= sz;
+ Some(tail)
+ }
+ }
+}
+
/// An iterator that moves out of a vector.
#[deriving(Clone)]
pub struct MoveIterator