From d43bf539482b8244690824e0880a80ed578d5429 Mon Sep 17 00:00:00 2001 From: Ulrik Sverdrup Date: Tue, 9 Jun 2015 11:23:22 +0200 Subject: Add str::split_at Implement RFC rust-lang/rfcs#1123 Add str method str::split_at(mid: usize) -> (&str, &str). --- src/libcore/str/mod.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'src/libcore') 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 where P::Searcher: ReverseSearcher<'a>; fn find_str<'a, P: Pattern<'a>>(&'a self, pat: P) -> Option; + 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() { -- cgit 1.4.1-3-g733a5