diff --git a/src/iterators.rs b/src/iterators.rs index ba0e5ad..1d0ff88 100644 --- a/src/iterators.rs +++ b/src/iterators.rs @@ -29,21 +29,23 @@ impl Iterator for IntoIter { if self.pos >= self.next { None } else { - let v = unsafe { self.items.add(self.pos).read() }; + let v = self.items[self.pos]; self.pos += 1; Some(v) } } } -impl<'a, V: Copy + 'a, const N: usize> Stack { - /// Into-iterate them. +impl IntoIterator for Stack { + type Item = V; + type IntoIter = IntoIter; + #[inline] - pub const fn into_iter(&self) -> IntoIter { + fn into_iter(self) -> Self::IntoIter { IntoIter { pos: 0, next: self.next, - items: self.items.as_ptr(), + items: self.items, } } } @@ -96,9 +98,5 @@ fn push_and_into_iterate() { let mut p: Stack = Stack::new(); unsafe { p.push_unchecked(1) }; unsafe { p.push_unchecked(2) }; - let mut sum = 0; - for x in p.into_iter() { - sum += x; - } - assert_eq!(3, sum); + assert_eq!(vec![1, 2], p.into_iter().collect::>()); } diff --git a/src/lib.rs b/src/lib.rs index 5a0c94a..3c54b22 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -91,5 +91,5 @@ pub struct IntoIter { /// The next available position in the array. next: usize, /// The fixed-size array of values. - items: *const V, + items: [V; N], }