diff options
| author | Simon Sapin <simon.sapin@exyr.org> | 2015-06-15 19:24:52 +0200 |
|---|---|---|
| committer | Simon Sapin <simon.sapin@exyr.org> | 2015-07-13 16:21:43 +0200 |
| commit | 7469914e96a511487e8248d2f8a583befb02149f (patch) | |
| tree | 3f3b92e8940ad8690a72bb6c9149e79e9bf70b94 /src/libcore | |
| parent | f9005512a9d84f469b30f0d469ccc401607ce64c (diff) | |
| download | rust-7469914e96a511487e8248d2f8a583befb02149f.tar.gz rust-7469914e96a511487e8248d2f8a583befb02149f.zip | |
Add str::split_at_mut
Diffstat (limited to 'src/libcore')
| -rw-r--r-- | src/libcore/str/mod.rs | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/libcore/str/mod.rs b/src/libcore/str/mod.rs index c8237720b0e..7e4c2ba3be8 100644 --- a/src/libcore/str/mod.rs +++ b/src/libcore/str/mod.rs @@ -1279,6 +1279,7 @@ pub trait StrExt { 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 split_at_mut(&mut self, mid: usize) -> (&mut str, &mut 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; @@ -1591,6 +1592,20 @@ impl StrExt for str { } } + fn split_at_mut(&mut self, mid: usize) -> (&mut str, &mut str) { + // is_char_boundary checks that the index is in [0, .len()] + if self.is_char_boundary(mid) { + let len = self.len(); + unsafe { + let self2: &mut str = mem::transmute_copy(&self); + (self.slice_mut_unchecked(0, mid), + self2.slice_mut_unchecked(mid, len)) + } + } else { + slice_error_fail(self, 0, mid) + } + } + #[inline] fn slice_shift_char(&self) -> Option<(char, &str)> { if self.is_empty() { |
