@@ -690,6 +690,17 @@ impl<'a, P: Pattern<'a>> SplitInternal<'a, P> {
690690            } , 
691691        } 
692692    } 
693+ 
694+     #[ inline]  
695+     fn  as_str ( & self )  -> & ' a  str  { 
696+         // `Self::get_end` doesn't change `self.start` 
697+         if  self . finished  { 
698+             return  "" ; 
699+         } 
700+ 
701+         // SAFETY: `self.start` and `self.end` always lie on unicode boundaries. 
702+         unsafe  {  self . matcher . haystack ( ) . get_unchecked ( self . start ..self . end )  } 
703+     } 
693704} 
694705
695706generate_pattern_iterators !  { 
@@ -710,6 +721,48 @@ generate_pattern_iterators! {
710721    delegate double ended; 
711722} 
712723
724+ impl < ' a ,  P :  Pattern < ' a > >  Split < ' a ,  P >  { 
725+     /// Returns remainder of the splitted string 
726+      /// 
727+      /// # Examples 
728+      /// 
729+      /// ``` 
730+      /// #![feature(str_split_as_str)] 
731+      /// let mut split = "Mary had a little lamb".split(' '); 
732+      /// assert_eq!(split.as_str(), "Mary had a little lamb"); 
733+      /// split.next(); 
734+      /// assert_eq!(split.as_str(), "had a little lamb"); 
735+      /// split.by_ref().for_each(drop); 
736+      /// assert_eq!(split.as_str(), ""); 
737+      /// ``` 
738+      #[ inline]  
739+     #[ unstable( feature = "str_split_as_str" ,  issue = "77998" ) ]  
740+     pub  fn  as_str ( & self )  -> & ' a  str  { 
741+         self . 0 . as_str ( ) 
742+     } 
743+ } 
744+ 
745+ impl < ' a ,  P :  Pattern < ' a > >  RSplit < ' a ,  P >  { 
746+     /// Returns remainder of the splitted string 
747+      /// 
748+      /// # Examples 
749+      /// 
750+      /// ``` 
751+      /// #![feature(str_split_as_str)] 
752+      /// let mut split = "Mary had a little lamb".rsplit(' '); 
753+      /// assert_eq!(split.as_str(), "Mary had a little lamb"); 
754+      /// split.next(); 
755+      /// assert_eq!(split.as_str(), "Mary had a little"); 
756+      /// split.by_ref().for_each(drop); 
757+      /// assert_eq!(split.as_str(), ""); 
758+      /// ``` 
759+      #[ inline]  
760+     #[ unstable( feature = "str_split_as_str" ,  issue = "77998" ) ]  
761+     pub  fn  as_str ( & self )  -> & ' a  str  { 
762+         self . 0 . as_str ( ) 
763+     } 
764+ } 
765+ 
713766generate_pattern_iterators !  { 
714767    forward: 
715768        /// Created with the method [`split_terminator`]. 
@@ -728,6 +781,48 @@ generate_pattern_iterators! {
728781    delegate double ended; 
729782} 
730783
784+ impl < ' a ,  P :  Pattern < ' a > >  SplitTerminator < ' a ,  P >  { 
785+     /// Returns remainder of the splitted string 
786+      /// 
787+      /// # Examples 
788+      /// 
789+      /// ``` 
790+      /// #![feature(str_split_as_str)] 
791+      /// let mut split = "A..B..".split_terminator('.'); 
792+      /// assert_eq!(split.as_str(), "A..B.."); 
793+      /// split.next(); 
794+      /// assert_eq!(split.as_str(), ".B.."); 
795+      /// split.by_ref().for_each(drop); 
796+      /// assert_eq!(split.as_str(), ""); 
797+      /// ``` 
798+      #[ inline]  
799+     #[ unstable( feature = "str_split_as_str" ,  issue = "77998" ) ]  
800+     pub  fn  as_str ( & self )  -> & ' a  str  { 
801+         self . 0 . as_str ( ) 
802+     } 
803+ } 
804+ 
805+ impl < ' a ,  P :  Pattern < ' a > >  RSplitTerminator < ' a ,  P >  { 
806+     /// Returns remainder of the splitted string 
807+      /// 
808+      /// # Examples 
809+      /// 
810+      /// ``` 
811+      /// #![feature(str_split_as_str)] 
812+      /// let mut split = "A..B..".rsplit_terminator('.'); 
813+      /// assert_eq!(split.as_str(), "A..B.."); 
814+      /// split.next(); 
815+      /// assert_eq!(split.as_str(), "A..B"); 
816+      /// split.by_ref().for_each(drop); 
817+      /// assert_eq!(split.as_str(), ""); 
818+      /// ``` 
819+      #[ inline]  
820+     #[ unstable( feature = "str_split_as_str" ,  issue = "77998" ) ]  
821+     pub  fn  as_str ( & self )  -> & ' a  str  { 
822+         self . 0 . as_str ( ) 
823+     } 
824+ } 
825+ 
731826derive_pattern_clone !  { 
732827    clone SplitNInternal 
733828    with |s| SplitNInternal  {  iter:  s. iter. clone( ) ,  ..* s } 
@@ -784,6 +879,11 @@ impl<'a, P: Pattern<'a>> SplitNInternal<'a, P> {
784879            } 
785880        } 
786881    } 
882+ 
883+     #[ inline]  
884+     fn  as_str ( & self )  -> & ' a  str  { 
885+         self . iter . as_str ( ) 
886+     } 
787887} 
788888
789889generate_pattern_iterators !  { 
@@ -804,6 +904,48 @@ generate_pattern_iterators! {
804904    delegate single ended; 
805905} 
806906
907+ impl < ' a ,  P :  Pattern < ' a > >  SplitN < ' a ,  P >  { 
908+     /// Returns remainder of the splitted string 
909+      /// 
910+      /// # Examples 
911+      /// 
912+      /// ``` 
913+      /// #![feature(str_split_as_str)] 
914+      /// let mut split = "Mary had a little lamb".splitn(3, ' '); 
915+      /// assert_eq!(split.as_str(), "Mary had a little lamb"); 
916+      /// split.next(); 
917+      /// assert_eq!(split.as_str(), "had a little lamb"); 
918+      /// split.by_ref().for_each(drop); 
919+      /// assert_eq!(split.as_str(), ""); 
920+      /// ``` 
921+      #[ inline]  
922+     #[ unstable( feature = "str_split_as_str" ,  issue = "77998" ) ]  
923+     pub  fn  as_str ( & self )  -> & ' a  str  { 
924+         self . 0 . as_str ( ) 
925+     } 
926+ } 
927+ 
928+ impl < ' a ,  P :  Pattern < ' a > >  RSplitN < ' a ,  P >  { 
929+     /// Returns remainder of the splitted string 
930+      /// 
931+      /// # Examples 
932+      /// 
933+      /// ``` 
934+      /// #![feature(str_split_as_str)] 
935+      /// let mut split = "Mary had a little lamb".rsplitn(3, ' '); 
936+      /// assert_eq!(split.as_str(), "Mary had a little lamb"); 
937+      /// split.next(); 
938+      /// assert_eq!(split.as_str(), "Mary had a little"); 
939+      /// split.by_ref().for_each(drop); 
940+      /// assert_eq!(split.as_str(), ""); 
941+      /// ``` 
942+      #[ inline]  
943+     #[ unstable( feature = "str_split_as_str" ,  issue = "77998" ) ]  
944+     pub  fn  as_str ( & self )  -> & ' a  str  { 
945+         self . 0 . as_str ( ) 
946+     } 
947+ } 
948+ 
807949derive_pattern_clone !  { 
808950    clone MatchIndicesInternal 
809951    with |s| MatchIndicesInternal ( s. 0 . clone( ) ) 
@@ -1134,6 +1276,28 @@ impl<'a, P: Pattern<'a, Searcher: ReverseSearcher<'a>>> DoubleEndedIterator
11341276#[ unstable( feature = "split_inclusive" ,  issue = "72360" ) ]  
11351277impl < ' a ,  P :  Pattern < ' a > >  FusedIterator  for  SplitInclusive < ' a ,  P >  { } 
11361278
1279+ impl < ' a ,  P :  Pattern < ' a > >  SplitInclusive < ' a ,  P >  { 
1280+     /// Returns remainder of the splitted string 
1281+      /// 
1282+      /// # Examples 
1283+      /// 
1284+      /// ``` 
1285+      /// #![feature(str_split_inclusive_as_str)] 
1286+      /// #![feature(split_inclusive)] 
1287+      /// let mut split = "Mary had a little lamb".split_inclusive(' '); 
1288+      /// assert_eq!(split.as_str(), "Mary had a little lamb"); 
1289+      /// split.next(); 
1290+      /// assert_eq!(split.as_str(), "had a little lamb"); 
1291+      /// split.by_ref().for_each(drop); 
1292+      /// assert_eq!(split.as_str(), ""); 
1293+      /// ``` 
1294+      #[ inline]  
1295+     #[ unstable( feature = "str_split_inclusive_as_str" ,  issue = "77998" ) ]  
1296+     pub  fn  as_str ( & self )  -> & ' a  str  { 
1297+         self . 0 . as_str ( ) 
1298+     } 
1299+ } 
1300+ 
11371301/// An iterator of [`u16`] over the string encoded as UTF-16. 
11381302/// 
11391303/// This struct is created by the [`encode_utf16`] method on [`str`]. 
0 commit comments