@@ -508,6 +508,7 @@ impl<T> [T] {
508508 /// ```
509509 /// assert_eq!(["hello", "world"].join(" "), "hello world");
510510 /// assert_eq!([[1, 2], [3, 4]].join(&0), [1, 2, 0, 3, 4]);
511+ /// assert_eq!([[1, 2], [3, 4]].join(&[0, 0][..]), [1, 2, 0, 0, 3, 4]);
511512 /// ```
512513 #[ stable( feature = "rename_connect_to_join" , since = "1.3.0" ) ]
513514 pub fn join < Separator > ( & self , sep : Separator ) -> <Self as Join < Separator > >:: Output
@@ -654,7 +655,7 @@ impl<T: Clone, V: Borrow<[T]>> Join<&'_ T> for [V] {
654655 Some ( first) => first,
655656 None => return vec ! [ ] ,
656657 } ;
657- let size = slice. iter ( ) . map ( |slice| slice . borrow ( ) . len ( ) ) . sum :: < usize > ( ) + slice. len ( ) - 1 ;
658+ let size = slice. iter ( ) . map ( |v| v . borrow ( ) . len ( ) ) . sum :: < usize > ( ) + slice. len ( ) - 1 ;
658659 let mut result = Vec :: with_capacity ( size) ;
659660 result. extend_from_slice ( first. borrow ( ) ) ;
660661
@@ -666,6 +667,29 @@ impl<T: Clone, V: Borrow<[T]>> Join<&'_ T> for [V] {
666667 }
667668}
668669
670+ #[ unstable( feature = "slice_concat_ext" , issue = "27747" ) ]
671+ impl < T : Clone , V : Borrow < [ T ] > > Join < & ' _ [ T ] > for [ V ] {
672+ type Output = Vec < T > ;
673+
674+ fn join ( slice : & Self , sep : & [ T ] ) -> Vec < T > {
675+ let mut iter = slice. iter ( ) ;
676+ let first = match iter. next ( ) {
677+ Some ( first) => first,
678+ None => return vec ! [ ] ,
679+ } ;
680+ let size = slice. iter ( ) . map ( |v| v. borrow ( ) . len ( ) ) . sum :: < usize > ( ) +
681+ sep. len ( ) * ( slice. len ( ) - 1 ) ;
682+ let mut result = Vec :: with_capacity ( size) ;
683+ result. extend_from_slice ( first. borrow ( ) ) ;
684+
685+ for v in iter {
686+ result. extend_from_slice ( sep) ;
687+ result. extend_from_slice ( v. borrow ( ) )
688+ }
689+ result
690+ }
691+ }
692+
669693////////////////////////////////////////////////////////////////////////////////
670694// Standard trait implementations for slices
671695////////////////////////////////////////////////////////////////////////////////
0 commit comments