File tree Expand file tree Collapse file tree 4 files changed +29
-19
lines changed Expand file tree Collapse file tree 4 files changed +29
-19
lines changed Original file line number Diff line number Diff 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
Original file line number Diff line number Diff 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+
211215struct RawValIter <T > {
212216 start : * const T ,
213217 end : * const T ,
Original file line number Diff line number Diff 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;
Original file line number Diff line number Diff 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).
You can’t perform that action at this time.
0 commit comments