File tree Expand file tree Collapse file tree 2 files changed +33
-5
lines changed
Expand file tree Collapse file tree 2 files changed +33
-5
lines changed Original file line number Diff line number Diff line change @@ -16,7 +16,7 @@ pub enum Test {
1616 Flag11 = 1 << 10 ,
1717}
1818
19- pub fn from_iterator ( c : & mut Criterion ) {
19+ pub fn iterators ( c : & mut Criterion ) {
2020 let v = vec ! [
2121 Test :: Flag3 ,
2222 Test :: Flag7 ,
@@ -31,17 +31,32 @@ pub fn from_iterator(c: &mut Criterion) {
3131 Test :: Flag4 ,
3232 ] ;
3333
34- c. bench_function ( "simple iterator" , |b| b. iter ( || {
34+ c. bench_function ( "simple iterator collect " , |b| b. iter ( || {
3535 black_box ( & v) . iter ( ) . copied ( ) . collect :: < BitFlags < _ > > ( )
3636 } ) ) ;
3737
38- c. bench_function ( "chained iterator" , |b| b. iter ( || {
38+ c. bench_function ( "chained iterator collect " , |b| b. iter ( || {
3939 black_box ( & v) . iter ( )
4040 . chain ( black_box ( & v2) . iter ( ) )
4141 . copied ( )
4242 . collect :: < BitFlags < _ > > ( )
4343 } ) ) ;
44+
45+ c. bench_function ( "simple iterator extend" , |b| b. iter ( || {
46+ let mut flags = BitFlags :: empty ( ) ;
47+ flags. extend ( black_box ( & v) . iter ( ) . copied ( ) ) ;
48+ flags
49+ } ) ) ;
50+
51+ c. bench_function ( "chained iterator extend" , |b| b. iter ( || {
52+ let mut flags = BitFlags :: empty ( ) ;
53+ flags. extend (
54+ black_box ( & v) . iter ( )
55+ . chain ( black_box ( & v2) . iter ( ) )
56+ . copied ( ) ) ;
57+ flags
58+ } ) ) ;
4459}
4560
46- criterion_group ! ( benches, from_iterator ) ;
61+ criterion_group ! ( benches, iterators ) ;
4762criterion_main ! ( benches) ;
Original file line number Diff line number Diff line change @@ -375,13 +375,26 @@ where
375375 B : Into < BitFlags < T > >
376376{
377377 fn from_iter < I > ( it : I ) -> BitFlags < T >
378- where
378+ where
379379 I : IntoIterator < Item = B >
380380 {
381381 it. into_iter ( ) . fold ( BitFlags :: empty ( ) , |acc, flag| acc | flag)
382382 }
383383}
384384
385+ impl < T , B > Extend < B > for BitFlags < T >
386+ where
387+ T : RawBitFlags ,
388+ B : Into < BitFlags < T > >
389+ {
390+ fn extend < I > ( & mut self , it : I )
391+ where
392+ I : IntoIterator < Item = B >
393+ {
394+ * self = it. into_iter ( ) . fold ( * self , |acc, flag| acc | flag)
395+ }
396+ }
397+
385398#[ cfg( feature = "serde" ) ]
386399mod impl_serde {
387400 use serde:: { Serialize , Deserialize } ;
You can’t perform that action at this time.
0 commit comments