diff options
| author | Thomas Garcia <thomasjgarcia1@gmail.com> | 2016-08-04 21:33:57 -0700 |
|---|---|---|
| committer | Thomas Garcia <thomasjgarcia1@gmail.com> | 2016-08-04 21:33:57 -0700 |
| commit | bf592cefde313aed68bccc91c053f5912350249b (patch) | |
| tree | a534f69b0d36c59304f2271f310498b00ee7a6ea /src/libcollections | |
| parent | 40f3ee2a01ef24d57430726c098de905c7c6e04a (diff) | |
Made vec_deque::Drain, hash_map::Drain, and hash_set::Drain covariant
Diffstat (limited to 'src/libcollections')
| -rw-r--r-- | src/libcollections/vec_deque.rs | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/src/libcollections/vec_deque.rs b/src/libcollections/vec_deque.rs index 9c3792afa2f..812a67a7e78 100644 --- a/src/libcollections/vec_deque.rs +++ b/src/libcollections/vec_deque.rs @@ -24,6 +24,7 @@ use core::iter::{repeat, FromIterator}; use core::mem; use core::ops::{Index, IndexMut}; use core::ptr; +use core::ptr::Shared; use core::slice; use core::hash::{Hash, Hasher}; @@ -903,7 +904,7 @@ impl<T> VecDeque<T> { self.head = drain_tail; Drain { - deque: self as *mut _, + deque: unsafe { Shared::new(self as *mut _) }, after_tail: drain_head, after_head: head, iter: Iter { @@ -1985,7 +1986,7 @@ pub struct Drain<'a, T: 'a> { after_tail: usize, after_head: usize, iter: Iter<'a, T>, - deque: *mut VecDeque<T>, + deque: Shared<VecDeque<T>>, } #[stable(feature = "drain", since = "1.6.0")] @@ -1998,7 +1999,7 @@ impl<'a, T: 'a> Drop for Drain<'a, T> { fn drop(&mut self) { for _ in self.by_ref() {} - let source_deque = unsafe { &mut *self.deque }; + let source_deque = unsafe { &mut **self.deque }; // T = source_deque_tail; H = source_deque_head; t = drain_tail; h = drain_head // |
