@@ -19,7 +19,7 @@ use std::cell::RefCell;
1919pub struct Unit ;
2020
2121pub struct BencherConfig < GenI = Unit > {
22- gen_input : GenI ,
22+ gen_input : RefCell < GenI > ,
2323}
2424
2525pub struct Bencher < ' a , ' b , C = BencherConfig > {
@@ -29,11 +29,12 @@ pub struct Bencher<'a, 'b, C = BencherConfig> {
2929 pub ( crate ) _marker : std:: marker:: PhantomData < & ' b ( ) > ,
3030}
3131
32- #[ allow( clippy:: needless_lifetimes) ]
3332impl < ' a , ' b > Bencher < ' a , ' b > {
3433 pub ( crate ) fn new ( codspeed : & ' a RefCell < CodSpeed > , uri : String ) -> Self {
3534 Self {
36- config : BencherConfig { gen_input : Unit } ,
35+ config : BencherConfig {
36+ gen_input : RefCell :: new ( Unit ) ,
37+ } ,
3738 codspeed,
3839 uri,
3940 _marker : std:: marker:: PhantomData ,
@@ -42,7 +43,9 @@ impl<'a, 'b> Bencher<'a, 'b> {
4243
4344 pub fn with_inputs < G > ( self , gen_input : G ) -> Bencher < ' a , ' b , BencherConfig < G > > {
4445 Bencher {
45- config : BencherConfig { gen_input } ,
46+ config : BencherConfig {
47+ gen_input : RefCell :: new ( gen_input) ,
48+ } ,
4649 codspeed : self . codspeed ,
4750 uri : self . uri ,
4851 _marker : self . _marker ,
@@ -58,9 +61,9 @@ impl<'a, 'b> Bencher<'a, 'b> {
5861 self . with_inputs ( || ( ) ) . bench_values ( |_| benched ( ) )
5962 }
6063
61- pub fn bench_local < O , B > ( self , benched : B )
64+ pub fn bench_local < O , B > ( self , mut benched : B )
6265 where
63- B : Fn ( ) -> O ,
66+ B : FnMut ( ) -> O ,
6467 {
6568 self . with_inputs ( || ( ) ) . bench_local_values ( |_| benched ( ) )
6669 }
@@ -86,24 +89,24 @@ where
8689 self . bench_local_refs ( benched)
8790 }
8891
89- pub fn bench_local_values < O , B > ( mut self , benched : B )
92+ pub fn bench_local_values < O , B > ( self , mut benched : B )
9093 where
91- B : Fn ( I ) -> O ,
94+ B : FnMut ( I ) -> O ,
9295 {
9396 let mut codspeed = self . codspeed . borrow_mut ( ) ;
94- let gen_input = & mut self . config . gen_input ;
97+ let mut gen_input = self . config . gen_input . borrow_mut ( ) ;
9598 let input = gen_input ( ) ;
9699 codspeed. start_benchmark ( self . uri . as_str ( ) ) ;
97100 divan:: black_box ( benched ( input) ) ;
98101 codspeed. end_benchmark ( ) ;
99102 }
100103
101- pub fn bench_local_refs < O , B > ( mut self , mut benched : B )
104+ pub fn bench_local_refs < O , B > ( self , mut benched : B )
102105 where
103106 B : FnMut ( & mut I ) -> O ,
104107 {
105108 let mut codspeed = self . codspeed . borrow_mut ( ) ;
106- let gen_input = & mut self . config . gen_input ;
109+ let mut gen_input = self . config . gen_input . borrow_mut ( ) ;
107110 let mut input = gen_input ( ) ;
108111
109112 codspeed. start_benchmark ( self . uri . as_str ( ) ) ;
0 commit comments