@@ -1279,6 +1279,7 @@ pub trait StrExt {
1279
1279
where P :: Searcher : ReverseSearcher < ' a > ;
1280
1280
fn find_str < ' a , P : Pattern < ' a > > ( & ' a self , pat : P ) -> Option < usize > ;
1281
1281
fn split_at ( & self , mid : usize ) -> ( & str , & str ) ;
1282
+ fn split_at_mut ( & mut self , mid : usize ) -> ( & mut str , & mut str ) ;
1282
1283
fn slice_shift_char < ' a > ( & ' a self ) -> Option < ( char , & ' a str ) > ;
1283
1284
fn subslice_offset ( & self , inner : & str ) -> usize ;
1284
1285
fn as_ptr ( & self ) -> * const u8 ;
@@ -1591,6 +1592,20 @@ impl StrExt for str {
1591
1592
}
1592
1593
}
1593
1594
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
+
1594
1609
#[ inline]
1595
1610
fn slice_shift_char ( & self ) -> Option < ( char , & str ) > {
1596
1611
if self . is_empty ( ) {
0 commit comments