Skip to content

Commit 206d4f0

Browse files
committed
Convert vec::retain to a method.
1 parent 4470d14 commit 206d4f0

File tree

1 file changed

+18
-22
lines changed

1 file changed

+18
-22
lines changed

src/libstd/vec.rs

Lines changed: 18 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -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.
711691
pub 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

Comments
 (0)