about summary refs log tree commit diff
path: root/src/liballoc/vec_deque.rs
diff options
context:
space:
mode:
authorNikolai Vazquez <nvazquez1297@gmail.com>2017-09-30 10:08:33 -0400
committerNikolai Vazquez <nvazquez1297@gmail.com>2017-09-30 10:08:33 -0400
commit4c853adce9103b8bc84cd6b0026bcdc2eed7da31 (patch)
treef71af0eb9d7139af598684355e690596721eac1b /src/liballoc/vec_deque.rs
parentd9d877221f65b26e52f49bfc639ef705ff396deb (diff)
parentc4cca3a72df87def5cb18ff500c643fbff8ad08e (diff)
downloadrust-4c853adce9103b8bc84cd6b0026bcdc2eed7da31.tar.gz
rust-4c853adce9103b8bc84cd6b0026bcdc2eed7da31.zip
Merge remote-tracking branch 'upstream/master'
Diffstat (limited to 'src/liballoc/vec_deque.rs')
-rw-r--r--src/liballoc/vec_deque.rs18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/liballoc/vec_deque.rs b/src/liballoc/vec_deque.rs
index 00def2a1eac..6d64e9e303f 100644
--- a/src/liballoc/vec_deque.rs
+++ b/src/liballoc/vec_deque.rs
@@ -558,7 +558,7 @@ impl<T> VecDeque<T> {
             .and_then(|needed_cap| needed_cap.checked_next_power_of_two())
             .expect("capacity overflow");
 
-        if new_cap > self.capacity() {
+        if new_cap > old_cap {
             self.buf.reserve_exact(used_cap, new_cap - used_cap);
             unsafe {
                 self.handle_cap_increase(old_cap);
@@ -1973,6 +1973,14 @@ impl<'a, T> DoubleEndedIterator for Iter<'a, T> {
         self.head = wrap_index(self.head.wrapping_sub(1), self.ring.len());
         unsafe { Some(self.ring.get_unchecked(self.head)) }
     }
+
+    fn rfold<Acc, F>(self, mut accum: Acc, mut f: F) -> Acc
+        where F: FnMut(Acc, Self::Item) -> Acc
+    {
+        let (front, back) = RingSlices::ring_slices(self.ring, self.head, self.tail);
+        accum = back.iter().rfold(accum, &mut f);
+        front.iter().rfold(accum, &mut f)
+    }
 }
 
 #[stable(feature = "rust1", since = "1.0.0")]
@@ -2058,6 +2066,14 @@ impl<'a, T> DoubleEndedIterator for IterMut<'a, T> {
             Some(&mut *(elem as *mut _))
         }
     }
+
+    fn rfold<Acc, F>(self, mut accum: Acc, mut f: F) -> Acc
+        where F: FnMut(Acc, Self::Item) -> Acc
+    {
+        let (front, back) = RingSlices::ring_slices(self.ring, self.head, self.tail);
+        accum = back.iter_mut().rfold(accum, &mut f);
+        front.iter_mut().rfold(accum, &mut f)
+    }
 }
 
 #[stable(feature = "rust1", since = "1.0.0")]