提交 4d8295df 编写于 作者: D Daniel Micay

make `MutItems` iterator sound again

This become `Pod` when it was switched to using marker types.
上级 6e7f170f
...@@ -2311,11 +2311,13 @@ fn mut_iter(self) -> MutItems<'a, T> { ...@@ -2311,11 +2311,13 @@ fn mut_iter(self) -> MutItems<'a, T> {
if mem::size_of::<T>() == 0 { if mem::size_of::<T>() == 0 {
MutItems{ptr: p, MutItems{ptr: p,
end: (p as uint + self.len()) as *mut T, end: (p as uint + self.len()) as *mut T,
marker: marker::ContravariantLifetime::<'a>} marker: marker::ContravariantLifetime::<'a>,
marker2: marker::NoPod}
} else { } else {
MutItems{ptr: p, MutItems{ptr: p,
end: p.offset(self.len() as int), end: p.offset(self.len() as int),
marker: marker::ContravariantLifetime::<'a>} marker: marker::ContravariantLifetime::<'a>,
marker2: marker::NoPod}
} }
} }
} }
...@@ -2682,15 +2684,23 @@ impl<A> Default for ~[A] { ...@@ -2682,15 +2684,23 @@ impl<A> Default for ~[A] {
fn default() -> ~[A] { ~[] } fn default() -> ~[A] { ~[] }
} }
/// Immutable slice iterator
pub struct Items<'a, T> {
priv ptr: *T,
priv end: *T,
priv marker: marker::ContravariantLifetime<'a>
}
/// Mutable slice iterator
pub struct MutItems<'a, T> {
priv ptr: *mut T,
priv end: *mut T,
priv marker: marker::ContravariantLifetime<'a>,
priv marker2: marker::NoPod
}
macro_rules! iterator { macro_rules! iterator {
(struct $name:ident -> $ptr:ty, $elem:ty) => { (struct $name:ident -> $ptr:ty, $elem:ty) => {
/// An iterator for iterating over a vector.
pub struct $name<'a, T> {
priv ptr: $ptr,
priv end: $ptr,
priv marker: marker::ContravariantLifetime<'a>,
}
impl<'a, T> Iterator<$elem> for $name<'a, T> { impl<'a, T> Iterator<$elem> for $name<'a, T> {
#[inline] #[inline]
fn next(&mut self) -> Option<$elem> { fn next(&mut self) -> Option<$elem> {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册