@@ -17,6 +17,7 @@ trait Vector<T>: for<'a> From<&'a [T]> + Extend<T> + ExtendFromSlice<T> {
17
17
fn remove ( & mut self , p : usize ) -> T ;
18
18
fn insert ( & mut self , n : usize , val : T ) ;
19
19
fn from_elem ( val : T , n : usize ) -> Self ;
20
+ fn from_elems ( val : & [ T ] ) -> Self ;
20
21
}
21
22
22
23
impl < T : Copy > Vector < T > for Vec < T > {
@@ -43,6 +44,10 @@ impl<T: Copy> Vector<T> for Vec<T> {
43
44
fn from_elem ( val : T , n : usize ) -> Self {
44
45
vec ! [ val; n]
45
46
}
47
+
48
+ fn from_elems ( val : & [ T ] ) -> Self {
49
+ val. to_owned ( )
50
+ }
46
51
}
47
52
48
53
impl < T : Copy > Vector < T > for SmallVec < [ T ; VEC_SIZE ] > {
@@ -69,6 +74,10 @@ impl<T: Copy> Vector<T> for SmallVec<[T; VEC_SIZE]> {
69
74
fn from_elem ( val : T , n : usize ) -> Self {
70
75
smallvec ! [ val; n]
71
76
}
77
+
78
+ fn from_elems ( val : & [ T ] ) -> Self {
79
+ SmallVec :: from_slice ( val)
80
+ }
72
81
}
73
82
74
83
macro_rules! make_benches {
@@ -92,6 +101,8 @@ make_benches! {
92
101
bench_remove_small => gen_remove( VEC_SIZE as _) ,
93
102
bench_extend => gen_extend( SPILLED_SIZE as _) ,
94
103
bench_extend_small => gen_extend( VEC_SIZE as _) ,
104
+ bench_from_iter => gen_from_iter( SPILLED_SIZE as _) ,
105
+ bench_from_iter_small => gen_from_iter( VEC_SIZE as _) ,
95
106
bench_from_slice => gen_from_slice( SPILLED_SIZE as _) ,
96
107
bench_from_slice_small => gen_from_slice( VEC_SIZE as _) ,
97
108
bench_extend_from_slice => gen_extend_from_slice( SPILLED_SIZE as _) ,
@@ -112,6 +123,8 @@ make_benches! {
112
123
bench_remove_vec_small => gen_remove( VEC_SIZE as _) ,
113
124
bench_extend_vec => gen_extend( SPILLED_SIZE as _) ,
114
125
bench_extend_vec_small => gen_extend( VEC_SIZE as _) ,
126
+ bench_from_iter_vec => gen_from_iter( SPILLED_SIZE as _) ,
127
+ bench_from_iter_vec_small => gen_from_iter( VEC_SIZE as _) ,
115
128
bench_from_slice_vec => gen_from_slice( SPILLED_SIZE as _) ,
116
129
bench_from_slice_vec_small => gen_from_slice( VEC_SIZE as _) ,
117
130
bench_extend_from_slice_vec => gen_extend_from_slice( SPILLED_SIZE as _) ,
@@ -179,14 +192,22 @@ fn gen_extend<V: Vector<u64>>(n: u64, b: &mut Bencher) {
179
192
} ) ;
180
193
}
181
194
182
- fn gen_from_slice < V : Vector < u64 > > ( n : u64 , b : & mut Bencher ) {
195
+ fn gen_from_iter < V : Vector < u64 > > ( n : u64 , b : & mut Bencher ) {
183
196
let v: Vec < u64 > = ( 0 ..n) . collect ( ) ;
184
197
b. iter ( || {
185
198
let vec = V :: from ( & v) ;
186
199
vec
187
200
} ) ;
188
201
}
189
202
203
+ fn gen_from_slice < V : Vector < u64 > > ( n : u64 , b : & mut Bencher ) {
204
+ let v: Vec < u64 > = ( 0 ..n) . collect ( ) ;
205
+ b. iter ( || {
206
+ let vec = V :: from_elems ( & v) ;
207
+ vec
208
+ } ) ;
209
+ }
210
+
190
211
fn gen_extend_from_slice < V : Vector < u64 > > ( n : u64 , b : & mut Bencher ) {
191
212
let v: Vec < u64 > = ( 0 ..n) . collect ( ) ;
192
213
b. iter ( || {
0 commit comments