diff options
| author | Huon Wilson <dbau.pp+github@gmail.com> | 2013-06-28 00:01:21 +1000 |
|---|---|---|
| committer | Huon Wilson <dbau.pp+github@gmail.com> | 2013-06-28 00:20:42 +1000 |
| commit | 206d4f00dc628cf0c7680ae2dc5b3ab6771c32e4 (patch) | |
| tree | f71add3cb10985b3422f831806e1eb8bd17d4a6a /src/libstd | |
| parent | 4470d14388b1637a1e4862c0650baddf6ed7c430 (diff) | |
| download | rust-206d4f00dc628cf0c7680ae2dc5b3ab6771c32e4.tar.gz rust-206d4f00dc628cf0c7680ae2dc5b3ab6771c32e4.zip | |
Convert vec::retain to a method.
Diffstat (limited to 'src/libstd')
| -rw-r--r-- | src/libstd/vec.rs | 40 |
1 files changed, 18 insertions, 22 deletions
diff --git a/src/libstd/vec.rs b/src/libstd/vec.rs index 2cc27861207..65c394f032c 100644 --- a/src/libstd/vec.rs +++ b/src/libstd/vec.rs @@ -687,26 +687,6 @@ pub fn filtered<T:Copy>(v: &[T], f: &fn(t: &T) -> bool) -> ~[T] { result } -/** - * Like `filter()`, but in place. Preserves order of `v`. Linear time. - */ -pub fn retain<T>(v: &mut ~[T], f: &fn(t: &T) -> bool) { - let len = v.len(); - let mut deleted: uint = 0; - - for uint::range(0, len) |i| { - if !f(&v[i]) { - deleted += 1; - } else if deleted > 0 { - swap(*v, i - deleted, i); - } - } - - if deleted > 0 { - v.truncate(len - deleted); - } -} - /// Flattens a vector of vectors of T into a single vector of T. pub fn concat<T:Copy>(v: &[~[T]]) -> ~[T] { v.concat_vec() } @@ -1820,9 +1800,25 @@ impl<T> OwnedVector<T> for ~[T] { unsafe { raw::set_len(self, newlen); } } - #[inline] + + /** + * Like `filter()`, but in place. Preserves order of `v`. Linear time. + */ fn retain(&mut self, f: &fn(t: &T) -> bool) { - retain(self, f); + let len = self.len(); + let mut deleted: uint = 0; + + for uint::range(0, len) |i| { + if !f(&self[i]) { + deleted += 1; + } else if deleted > 0 { + swap(*self, i - deleted, i); + } + } + + if deleted > 0 { + self.truncate(len - deleted); + } } #[inline] |
