@@ -1279,6 +1279,7 @@ pub trait StrExt {
12791279 where P :: Searcher : ReverseSearcher < ' a > ;
12801280 fn find_str < ' a , P : Pattern < ' a > > ( & ' a self , pat : P ) -> Option < usize > ;
12811281 fn split_at ( & self , mid : usize ) -> ( & str , & str ) ;
1282+ fn split_at_mut ( & mut self , mid : usize ) -> ( & mut str , & mut str ) ;
12821283 fn slice_shift_char < ' a > ( & ' a self ) -> Option < ( char , & ' a str ) > ;
12831284 fn subslice_offset ( & self , inner : & str ) -> usize ;
12841285 fn as_ptr ( & self ) -> * const u8 ;
@@ -1591,6 +1592,20 @@ impl StrExt for str {
15911592 }
15921593 }
15931594
1595+ fn split_at_mut ( & mut self , mid : usize ) -> ( & mut str , & mut str ) {
1596+ // is_char_boundary checks that the index is in [0, .len()]
1597+ if self . is_char_boundary ( mid) {
1598+ let len = self . len ( ) ;
1599+ unsafe {
1600+ let self2: & mut str = mem:: transmute_copy ( & self ) ;
1601+ ( self . slice_mut_unchecked ( 0 , mid) ,
1602+ self2. slice_mut_unchecked ( mid, len) )
1603+ }
1604+ } else {
1605+ slice_error_fail ( self , 0 , mid)
1606+ }
1607+ }
1608+
15941609 #[ inline]
15951610 fn slice_shift_char ( & self ) -> Option < ( char , & str ) > {
15961611 if self . is_empty ( ) {
0 commit comments