@@ -127,7 +127,7 @@ impl<T> Vec<T> {
127127
128128 pub fn insert (& mut self , index : usize , elem : T ) {
129129 assert! (index <= self . len, " index out of bounds" );
130- if self . cap () == self . len {
130+ if self . len == self . cap () {
131131 self . buf. grow ();
132132 }
133133
@@ -138,14 +138,17 @@ impl<T> Vec<T> {
138138 self . len - index ,
139139 );
140140 ptr :: write (self . ptr (). add (index ), elem );
141- self . len += 1 ;
142141 }
142+
143+ self . len += 1 ;
143144 }
144145
145146 pub fn remove (& mut self , index : usize ) -> T {
146147 assert! (index < self . len, " index out of bounds" );
148+
149+ self . len -= 1 ;
150+
147151 unsafe {
148- self . len -= 1 ;
149152 let result = ptr :: read (self . ptr (). add (index ));
150153 ptr :: copy (
151154 self . ptr (). add (index + 1 ),
@@ -157,18 +160,16 @@ impl<T> Vec<T> {
157160 }
158161
159162 pub fn drain (& mut self ) -> Drain <T > {
160- unsafe {
161- let iter = RawValIter :: new (& self );
163+ let iter = unsafe { RawValIter :: new (& self ) };
162164
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 ;
167169
168- Drain {
169- iter : iter ,
170- vec : PhantomData ,
171- }
170+ Drain {
171+ iter ,
172+ vec : PhantomData ,
172173 }
173174 }
174175}
@@ -197,15 +198,15 @@ impl<T> IntoIterator for Vec<T> {
197198 type Item = T ;
198199 type IntoIter = IntoIter <T >;
199200 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+ };
204204
205- IntoIter {
206- iter : iter ,
207- _buf : buf ,
208- }
205+ mem :: forget (self );
206+
207+ IntoIter {
208+ iter ,
209+ _buf : buf ,
209210 }
210211 }
211212}
0 commit comments