Skip to content

Commit e64ea93

Browse files
authored
implement IntoIterator for Vec (#337)
1 parent 7ea147e commit e64ea93

File tree

4 files changed

+29
-19
lines changed

4 files changed

+29
-19
lines changed

src/vec/vec-drain.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,10 @@ impl<T> Drop for IntoIter<T> {
8282
}
8383
}
8484
85-
impl<T> Vec<T> {
86-
pub fn into_iter(self) -> IntoIter<T> {
85+
impl<T> IntoIterator for Vec<T> {
86+
type Item = T;
87+
type IntoIter = IntoIter<T>;
88+
fn into_iter(self) -> IntoIter<T> {
8789
unsafe {
8890
let iter = RawValIter::new(&self);
8991

src/vec/vec-final.md

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -158,19 +158,6 @@ impl<T> Vec<T> {
158158
}
159159
}
160160

161-
pub fn into_iter(self) -> IntoIter<T> {
162-
unsafe {
163-
let iter = RawValIter::new(&self);
164-
let buf = ptr::read(&self.buf);
165-
mem::forget(self);
166-
167-
IntoIter {
168-
iter: iter,
169-
_buf: buf,
170-
}
171-
}
172-
}
173-
174161
pub fn drain(&mut self) -> Drain<T> {
175162
unsafe {
176163
let iter = RawValIter::new(&self);
@@ -208,6 +195,23 @@ impl<T> DerefMut for Vec<T> {
208195
}
209196
}
210197

198+
impl<T> IntoIterator for Vec<T> {
199+
type Item = T;
200+
type IntoIter = IntoIter<T>;
201+
fn into_iter(self) -> IntoIter<T> {
202+
unsafe {
203+
let iter = RawValIter::new(&self);
204+
let buf = ptr::read(&self.buf);
205+
mem::forget(self);
206+
207+
IntoIter {
208+
iter: iter,
209+
_buf: buf,
210+
}
211+
}
212+
}
213+
}
214+
211215
struct RawValIter<T> {
212216
start: *const T,
213217
end: *const T,

src/vec/vec-into-iter.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,10 @@ And this is what we end up with for initialization:
5757

5858
<!-- ignore: simplified code -->
5959
```rust,ignore
60-
impl<T> Vec<T> {
61-
pub fn into_iter(self) -> IntoIter<T> {
60+
impl<T> IntoIterator for Vec<T> {
61+
type Item = T;
62+
type IntoIter = IntoIter<T>;
63+
fn into_iter(self) -> IntoIter<T> {
6264
// Can't destructure Vec since it's Drop
6365
let ptr = self.ptr;
6466
let cap = self.cap;

src/vec/vec-raw.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,8 +134,10 @@ impl<T> Drop for IntoIter<T> {
134134
}
135135
}
136136
137-
impl<T> Vec<T> {
138-
pub fn into_iter(self) -> IntoIter<T> {
137+
impl<T> IntoIterator for Vec<T> {
138+
type Item = T;
139+
type IntoIter = IntoIter<T>;
140+
fn into_iter(self) -> IntoIter<T> {
139141
unsafe {
140142
// need to use ptr::read to unsafely move the buf out since it's
141143
// not Copy, and Vec implements Drop (so we can't destructure it).

0 commit comments

Comments
 (0)