diff options
| author | Huon Wilson <dbau.pp+github@gmail.com> | 2013-06-09 23:10:50 +1000 |
|---|---|---|
| committer | Huon Wilson <dbau.pp+github@gmail.com> | 2013-06-10 23:02:54 +1000 |
| commit | 1e8982bdb26208d9d9ed4cdcbcd21cc9ef35bd46 (patch) | |
| tree | 54f03a318e14bcdbdb56e01b3c80d00a9db87a17 /src/libstd/path.rs | |
| parent | 2ff6b298c5f23f48aa993fced41b6e29e446b7ce (diff) | |
| download | rust-1e8982bdb26208d9d9ed4cdcbcd21cc9ef35bd46.tar.gz rust-1e8982bdb26208d9d9ed4cdcbcd21cc9ef35bd46.zip | |
std: replace str::each_split* with an iterator
Diffstat (limited to 'src/libstd/path.rs')
| -rw-r--r-- | src/libstd/path.rs | 60 |
1 files changed, 30 insertions, 30 deletions
diff --git a/src/libstd/path.rs b/src/libstd/path.rs index a551b9bf3c0..b2f25d41157 100644 --- a/src/libstd/path.rs +++ b/src/libstd/path.rs @@ -18,6 +18,7 @@ Cross-platform file path handling use container::Container; use cmp::Eq; +use iterator::IteratorUtil; use libc; use option::{None, Option, Some}; use str; @@ -449,10 +450,9 @@ impl ToStr for PosixPath { // PosixPath and WindowsPath, most of their methods are common. impl GenericPath for PosixPath { fn from_str(s: &str) -> PosixPath { - let mut components = ~[]; - for str::each_split_nonempty(s, |c| c == '/') |s| { - components.push(s.to_owned()) - } + let components = s.split_iter('/') + .filter_map(|s| if s.is_empty() {None} else {Some(s.to_owned())}) + .collect(); let is_absolute = (s.len() != 0 && s[0] == '/' as u8); PosixPath { is_absolute: is_absolute, @@ -508,7 +508,7 @@ impl GenericPath for PosixPath { } fn with_filename(&self, f: &str) -> PosixPath { - assert!(! str::any(f, |c| windows::is_sep(c as u8))); + assert!(! str::any(f, |c| windows::is_sep(c))); self.dir_path().push(f) } @@ -569,11 +569,11 @@ impl GenericPath for PosixPath { fn push_many(&self, cs: &[~str]) -> PosixPath { let mut v = copy self.components; for cs.each |e| { - let mut ss = ~[]; - for str::each_split_nonempty(*e, |c| windows::is_sep(c as u8)) |s| { - ss.push(s.to_owned()) + for e.split_iter(windows::is_sep).advance |s| { + if !s.is_empty() { + v.push(s.to_owned()) + } } - v.push_all_move(ss); } PosixPath { is_absolute: self.is_absolute, @@ -583,11 +583,11 @@ impl GenericPath for PosixPath { fn push(&self, s: &str) -> PosixPath { let mut v = copy self.components; - let mut ss = ~[]; - for str::each_split_nonempty(s, |c| windows::is_sep(c as u8)) |s| { - ss.push(s.to_owned()) + for s.split_iter(windows::is_sep).advance |s| { + if !s.is_empty() { + v.push(s.to_owned()) + } } - v.push_all_move(ss); PosixPath { components: v, ..copy *self } } @@ -661,11 +661,11 @@ impl GenericPath for WindowsPath { } } - let mut components = ~[]; - for str::each_split_nonempty(rest, |c| windows::is_sep(c as u8)) |s| { - components.push(s.to_owned()) - } - let is_absolute = (rest.len() != 0 && windows::is_sep(rest[0])); + let components = rest.split_iter(windows::is_sep) + .filter_map(|s| if s.is_empty() {None} else {Some(s.to_owned())}) + .collect(); + + let is_absolute = (rest.len() != 0 && windows::is_sep(rest[0] as char)); WindowsPath { host: host, device: device, @@ -722,7 +722,7 @@ impl GenericPath for WindowsPath { } fn with_filename(&self, f: &str) -> WindowsPath { - assert!(! str::any(f, |c| windows::is_sep(c as u8))); + assert!(! str::any(f, |c| windows::is_sep(c))); self.dir_path().push(f) } @@ -826,11 +826,11 @@ impl GenericPath for WindowsPath { fn push_many(&self, cs: &[~str]) -> WindowsPath { let mut v = copy self.components; for cs.each |e| { - let mut ss = ~[]; - for str::each_split_nonempty(*e, |c| windows::is_sep(c as u8)) |s| { - ss.push(s.to_owned()) + for e.split_iter(windows::is_sep).advance |s| { + if !s.is_empty() { + v.push(s.to_owned()) + } } - v.push_all_move(ss); } // tedious, but as-is, we can't use ..self WindowsPath { @@ -843,11 +843,11 @@ impl GenericPath for WindowsPath { fn push(&self, s: &str) -> WindowsPath { let mut v = copy self.components; - let mut ss = ~[]; - for str::each_split_nonempty(s, |c| windows::is_sep(c as u8)) |s| { - ss.push(s.to_owned()) + for s.split_iter(windows::is_sep).advance |s| { + if !s.is_empty() { + v.push(s.to_owned()) + } } - v.push_all_move(ss); WindowsPath { components: v, ..copy *self } } @@ -905,8 +905,8 @@ pub mod windows { use option::{None, Option, Some}; #[inline(always)] - pub fn is_sep(u: u8) -> bool { - u == '/' as u8 || u == '\\' as u8 + pub fn is_sep(u: char) -> bool { + u == '/' || u == '\\' } pub fn extract_unc_prefix(s: &str) -> Option<(~str,~str)> { @@ -915,7 +915,7 @@ pub mod windows { s[0] == s[1]) { let mut i = 2; while i < s.len() { - if is_sep(s[i]) { + if is_sep(s[i] as char) { let pre = s.slice(2, i).to_owned(); let rest = s.slice(i, s.len()).to_owned(); return Some((pre, rest)); |
