@@ -687,26 +687,6 @@ pub fn filtered<T:Copy>(v: &[T], f: &fn(t: &T) -> bool) -> ~[T] {
687687 result
688688}
689689
690- /**
691- * Like `filter()`, but in place. Preserves order of `v`. Linear time.
692- */
693- pub fn retain < T > ( v : & mut ~[ T ] , f : & fn ( t : & T ) -> bool ) {
694- let len = v. len ( ) ;
695- let mut deleted: uint = 0 ;
696-
697- for uint:: range( 0 , len) |i| {
698- if !f ( & v[ i] ) {
699- deleted += 1 ;
700- } else if deleted > 0 {
701- swap ( * v, i - deleted, i) ;
702- }
703- }
704-
705- if deleted > 0 {
706- v. truncate ( len - deleted) ;
707- }
708- }
709-
710690/// Flattens a vector of vectors of T into a single vector of T.
711691pub fn concat < T : Copy > ( v : & [ ~[ T ] ] ) -> ~[ T ] { v. concat_vec ( ) }
712692
@@ -1820,9 +1800,25 @@ impl<T> OwnedVector<T> for ~[T] {
18201800 unsafe { raw:: set_len ( self , newlen) ; }
18211801 }
18221802
1823- #[ inline]
1803+
1804+ /**
1805+ * Like `filter()`, but in place. Preserves order of `v`. Linear time.
1806+ */
18241807 fn retain ( & mut self , f : & fn ( t : & T ) -> bool ) {
1825- retain ( self , f) ;
1808+ let len = self . len ( ) ;
1809+ let mut deleted: uint = 0 ;
1810+
1811+ for uint:: range( 0 , len) |i| {
1812+ if !f ( & self [ i] ) {
1813+ deleted += 1 ;
1814+ } else if deleted > 0 {
1815+ swap ( * self , i - deleted, i) ;
1816+ }
1817+ }
1818+
1819+ if deleted > 0 {
1820+ self . truncate ( len - deleted) ;
1821+ }
18261822 }
18271823
18281824 #[ inline]
0 commit comments