diff options
| author | Ulrik Sverdrup <root@localhost> | 2015-06-09 11:23:22 +0200 |
|---|---|---|
| committer | Ulrik Sverdrup <root@localhost> | 2015-06-10 09:15:07 +0200 |
| commit | d43bf539482b8244690824e0880a80ed578d5429 (patch) | |
| tree | 0d1e48d33e06ba667ceeb1b198aa774938d5765a /src/libcore/str/mod.rs | |
| parent | 6daf1dcb80e324df94ad4a1d263c832ab589b33a (diff) | |
| download | rust-d43bf539482b8244690824e0880a80ed578d5429.tar.gz rust-d43bf539482b8244690824e0880a80ed578d5429.zip | |
Add str::split_at
Implement RFC rust-lang/rfcs#1123 Add str method str::split_at(mid: usize) -> (&str, &str).
Diffstat (limited to 'src/libcore/str/mod.rs')
| -rw-r--r-- | src/libcore/str/mod.rs | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/libcore/str/mod.rs b/src/libcore/str/mod.rs index 11ca6e332b5..4db64a3097e 100644 --- a/src/libcore/str/mod.rs +++ b/src/libcore/str/mod.rs @@ -1517,6 +1517,7 @@ pub trait StrExt { fn rfind<'a, P: Pattern<'a>>(&'a self, pat: P) -> Option<usize> where P::Searcher: ReverseSearcher<'a>; fn find_str<'a, P: Pattern<'a>>(&'a self, pat: P) -> Option<usize>; + fn split_at(&self, mid: usize) -> (&str, &str); fn slice_shift_char<'a>(&'a self) -> Option<(char, &'a str)>; fn subslice_offset(&self, inner: &str) -> usize; fn as_ptr(&self) -> *const u8; @@ -1809,6 +1810,18 @@ impl StrExt for str { self.find(pat) } + fn split_at(&self, mid: usize) -> (&str, &str) { + // is_char_boundary checks that the index is in [0, .len()] + if self.is_char_boundary(mid) { + unsafe { + (self.slice_unchecked(0, mid), + self.slice_unchecked(mid, self.len())) + } + } else { + slice_error_fail(self, 0, mid) + } + } + #[inline] fn slice_shift_char(&self) -> Option<(char, &str)> { if self.is_empty() { |
