@@ -127,7 +127,7 @@ impl<T> Vec<T> {
127
127
128
128
pub fn insert (& mut self , index : usize , elem : T ) {
129
129
assert! (index <= self . len, " index out of bounds" );
130
- if self . cap () == self . len {
130
+ if self . len == self . cap () {
131
131
self . buf. grow ();
132
132
}
133
133
@@ -138,14 +138,17 @@ impl<T> Vec<T> {
138
138
self . len - index ,
139
139
);
140
140
ptr :: write (self . ptr (). add (index ), elem );
141
- self . len += 1 ;
142
141
}
142
+
143
+ self . len += 1 ;
143
144
}
144
145
145
146
pub fn remove (& mut self , index : usize ) -> T {
146
147
assert! (index < self . len, " index out of bounds" );
148
+
149
+ self . len -= 1 ;
150
+
147
151
unsafe {
148
- self . len -= 1 ;
149
152
let result = ptr :: read (self . ptr (). add (index ));
150
153
ptr :: copy (
151
154
self . ptr (). add (index + 1 ),
@@ -157,18 +160,16 @@ impl<T> Vec<T> {
157
160
}
158
161
159
162
pub fn drain (& mut self ) -> Drain <T > {
160
- unsafe {
161
- let iter = RawValIter :: new (& self );
163
+ let iter = unsafe { RawValIter :: new (& self ) };
162
164
163
- // this is a mem::forget safety thing. If Drain is forgotten, we just
164
- // leak the whole Vec's contents. Also we need to do this *eventually*
165
- // anyway, so why not do it now?
166
- self . len = 0 ;
165
+ // this is a mem::forget safety thing. If Drain is forgotten, we just
166
+ // leak the whole Vec's contents. Also we need to do this *eventually*
167
+ // anyway, so why not do it now?
168
+ self . len = 0 ;
167
169
168
- Drain {
169
- iter : iter ,
170
- vec : PhantomData ,
171
- }
170
+ Drain {
171
+ iter ,
172
+ vec : PhantomData ,
172
173
}
173
174
}
174
175
}
@@ -197,15 +198,15 @@ impl<T> IntoIterator for Vec<T> {
197
198
type Item = T ;
198
199
type IntoIter = IntoIter <T >;
199
200
fn into_iter (self ) -> IntoIter <T > {
200
- unsafe {
201
- let iter = RawValIter :: new (& self );
202
- let buf = ptr :: read (& self . buf);
203
- mem :: forget (self );
201
+ let (iter , buf ) = unsafe {
202
+ (RawValIter :: new (& self ), ptr :: read (& self . buf))
203
+ };
204
204
205
- IntoIter {
206
- iter : iter ,
207
- _buf : buf ,
208
- }
205
+ mem :: forget (self );
206
+
207
+ IntoIter {
208
+ iter ,
209
+ _buf : buf ,
209
210
}
210
211
}
211
212
}
0 commit comments