@@ -315,6 +315,16 @@ impl<A: Array> SmallVec<A> {
315
315
self . set_len ( len + 1 ) ;
316
316
}
317
317
}
318
+
319
+ pub fn insert_many < I : IntoIterator < Item =A :: Item > > ( & mut self , index : usize , iterable : I ) {
320
+ let iter = iterable. into_iter ( ) ;
321
+ let ( lower_size_bound, _) = iter. size_hint ( ) ;
322
+ self . reserve ( lower_size_bound) ;
323
+
324
+ for ( off, elem) in iter. enumerate ( ) {
325
+ self . insert ( index + off, elem) ;
326
+ }
327
+ }
318
328
}
319
329
320
330
impl < A : Array > ops:: Deref for SmallVec < A > {
@@ -869,6 +879,17 @@ pub mod tests {
869
879
assert_eq ! ( & v. iter( ) . map( |v| * * v) . collect:: <Vec <_>>( ) , & [ 0 , 3 , 2 ] ) ;
870
880
}
871
881
882
+ #[ test]
883
+ fn test_insert_many ( ) {
884
+ let mut v: SmallVec < [ u8 ; 8 ] > = SmallVec :: new ( ) ;
885
+ for x in 0 ..4 {
886
+ v. push ( x) ;
887
+ }
888
+ assert_eq ! ( v. len( ) , 4 ) ;
889
+ v. insert_many ( 1 , [ 5 , 6 ] . iter ( ) . cloned ( ) ) ;
890
+ assert_eq ! ( & v. iter( ) . map( |v| * v) . collect:: <Vec <_>>( ) , & [ 0 , 5 , 6 , 1 , 2 , 3 ] ) ;
891
+ }
892
+
872
893
#[ test]
873
894
#[ should_panic]
874
895
fn test_drop_panic_smallvec ( ) {
@@ -1039,6 +1060,14 @@ mod bench {
1039
1060
} ) ;
1040
1061
}
1041
1062
1063
+ #[ bench]
1064
+ fn bench_insert_many ( b : & mut Bencher ) {
1065
+ b. iter ( || {
1066
+ let mut vec: SmallVec < [ u64 ; 16 ] > = SmallVec :: new ( ) ;
1067
+ vec. insert_many ( 0 , 0 ..100 ) ;
1068
+ } ) ;
1069
+ }
1070
+
1042
1071
#[ bench]
1043
1072
fn bench_extend ( b : & mut Bencher ) {
1044
1073
b. iter ( || {
0 commit comments