File tree Expand file tree Collapse file tree 1 file changed +17
-19
lines changed
Expand file tree Collapse file tree 1 file changed +17
-19
lines changed Original file line number Diff line number Diff line change @@ -317,21 +317,21 @@ pub fn derive(input: &Input) -> TokenStream {
317317 #[ doc = #vec_name_str]
318318 /// ::retain()`](https://doc.rust-lang.org/std/vec/struct.Vec.html#method.retain).
319319 pub fn retain<F >( & mut self , mut f: F ) where F : FnMut ( #ref_name) -> bool {
320- let len = self . len( ) ;
321- let mut del = 0 ;
322-
323- {
324- let mut slice = self . as_mut_slice( ) ;
325- for i in 0 ..len {
326- if !f( slice. get( i) . unwrap( ) ) {
327- del += 1 ;
328- } else if del > 0 {
329- slice. swap( i - del, i) ;
320+ let mut slice = self . as_mut_slice( ) ;
321+ let len = slice. len( ) ;
322+ let mut write_idx = 0 ;
323+
324+ for read_idx in 0 ..len {
325+ if f( slice. get( read_idx) . unwrap( ) ) {
326+ if write_idx != read_idx {
327+ slice. swap( write_idx, read_idx) ;
330328 }
329+ write_idx += 1 ;
331330 }
332331 }
333- if del > 0 {
334- self . truncate( len - del) ;
332+
333+ if write_idx < len {
334+ self . truncate( write_idx) ;
335335 }
336336 }
337337
@@ -343,14 +343,12 @@ pub fn derive(input: &Input) -> TokenStream {
343343 let len = slice. len( ) ;
344344 let mut write_idx = 0 ;
345345
346- {
347- for read_idx in 0 ..len {
348- if f( slice. get_mut( read_idx) . unwrap( ) ) {
349- if write_idx != read_idx {
350- slice. swap( write_idx, read_idx) ;
351- }
352- write_idx += 1 ;
346+ for read_idx in 0 ..len {
347+ if f( slice. get_mut( read_idx) . unwrap( ) ) {
348+ if write_idx != read_idx {
349+ slice. swap( write_idx, read_idx) ;
353350 }
351+ write_idx += 1 ;
354352 }
355353 }
356354
You can’t perform that action at this time.
0 commit comments