Skip to content

Commit 4d8295d

Browse files
committed
make MutItems iterator sound again
This become `Pod` when it was switched to using marker types.
1 parent 6e7f170 commit 4d8295d

File tree

1 file changed

+19
-9
lines changed

1 file changed

+19
-9
lines changed

src/libstd/vec.rs

+19-9
Original file line numberDiff line numberDiff line change
@@ -2311,11 +2311,13 @@ impl<'a,T> MutableVector<'a, T> for &'a mut [T] {
23112311
if mem::size_of::<T>() == 0 {
23122312
MutItems{ptr: p,
23132313
end: (p as uint + self.len()) as *mut T,
2314-
marker: marker::ContravariantLifetime::<'a>}
2314+
marker: marker::ContravariantLifetime::<'a>,
2315+
marker2: marker::NoPod}
23152316
} else {
23162317
MutItems{ptr: p,
23172318
end: p.offset(self.len() as int),
2318-
marker: marker::ContravariantLifetime::<'a>}
2319+
marker: marker::ContravariantLifetime::<'a>,
2320+
marker2: marker::NoPod}
23192321
}
23202322
}
23212323
}
@@ -2682,15 +2684,23 @@ impl<A> Default for ~[A] {
26822684
fn default() -> ~[A] { ~[] }
26832685
}
26842686

2687+
/// Immutable slice iterator
2688+
pub struct Items<'a, T> {
2689+
priv ptr: *T,
2690+
priv end: *T,
2691+
priv marker: marker::ContravariantLifetime<'a>
2692+
}
2693+
2694+
/// Mutable slice iterator
2695+
pub struct MutItems<'a, T> {
2696+
priv ptr: *mut T,
2697+
priv end: *mut T,
2698+
priv marker: marker::ContravariantLifetime<'a>,
2699+
priv marker2: marker::NoPod
2700+
}
2701+
26852702
macro_rules! iterator {
26862703
(struct $name:ident -> $ptr:ty, $elem:ty) => {
2687-
/// An iterator for iterating over a vector.
2688-
pub struct $name<'a, T> {
2689-
priv ptr: $ptr,
2690-
priv end: $ptr,
2691-
priv marker: marker::ContravariantLifetime<'a>,
2692-
}
2693-
26942704
impl<'a, T> Iterator<$elem> for $name<'a, T> {
26952705
#[inline]
26962706
fn next(&mut self) -> Option<$elem> {

0 commit comments

Comments
 (0)