@@ -34,54 +34,27 @@ struct DekuVec {
34
34
data : Vec < u8 > ,
35
35
}
36
36
37
- fn deku_read_bits ( mut reader : impl Read ) {
38
- let mut reader = Reader :: new ( & mut reader) ;
39
- let _v = DekuBits :: from_reader_with_ctx ( & mut reader, ( ) ) . unwrap ( ) ;
40
- }
41
-
42
- fn deku_write_bits ( input : & DekuBits ) {
43
- let _v = input. to_bytes ( ) . unwrap ( ) ;
44
- }
45
-
46
- fn deku_read_byte ( mut reader : impl Read ) {
47
- let mut reader = Reader :: new ( & mut reader) ;
48
- let _v = DekuBytes :: from_reader_with_ctx ( & mut reader, ( ) ) . unwrap ( ) ;
49
- }
50
-
51
- fn deku_write_byte ( input : & DekuBytes ) {
37
+ fn deku_write < T : DekuContainerWrite > ( input : & T ) {
52
38
let _v = input. to_bytes ( ) . unwrap ( ) ;
53
39
}
54
40
55
- fn deku_read_enum ( mut reader : impl Read ) {
41
+ fn deku_read < T : for < ' a > DekuContainerRead < ' a > > ( mut reader : impl Read ) {
56
42
let mut reader = Reader :: new ( & mut reader) ;
57
- let _v = DekuEnum :: from_reader_with_ctx ( & mut reader, ( ) ) . unwrap ( ) ;
58
- }
59
-
60
- fn deku_write_enum ( input : & DekuEnum ) {
61
- let _v = input. to_bytes ( ) . unwrap ( ) ;
62
- }
63
-
64
- fn deku_read_vec ( mut reader : impl Read ) {
65
- let mut reader = Reader :: new ( & mut reader) ;
66
- let _v = DekuVec :: from_reader_with_ctx ( & mut reader, ( ) ) . unwrap ( ) ;
67
- }
68
-
69
- fn deku_write_vec ( input : & DekuVec ) {
70
- let _v = input. to_bytes ( ) . unwrap ( ) ;
43
+ let _v = T :: from_reader_with_ctx ( & mut reader, ( ) ) . unwrap ( ) ;
71
44
}
72
45
73
46
fn criterion_benchmark ( c : & mut Criterion ) {
74
47
c. bench_function ( "deku_read_byte" , |b| {
75
48
let reader = Cursor :: new ( & [ 0x01 ; 1 + 2 + 4 ] ) ;
76
49
b. iter_batched (
77
50
|| reader. clone ( ) ,
78
- |mut reader| deku_read_byte ( & mut reader) ,
51
+ |mut reader| deku_read :: < DekuBytes > ( & mut reader) ,
79
52
BatchSize :: SmallInput ,
80
53
)
81
54
} ) ;
82
55
c. bench_function ( "deku_write_byte" , |b| {
83
56
b. iter ( || {
84
- deku_write_byte ( black_box ( & DekuBytes {
57
+ deku_write ( black_box ( & DekuBytes {
85
58
data_00 : 0x00 ,
86
59
data_01 : 0x02 ,
87
60
data_02 : 0x03 ,
@@ -92,13 +65,13 @@ fn criterion_benchmark(c: &mut Criterion) {
92
65
let reader = Cursor :: new ( & [ 0x01 ; 1 ] ) ;
93
66
b. iter_batched (
94
67
|| reader. clone ( ) ,
95
- |mut reader| deku_read_bits ( & mut reader) ,
68
+ |mut reader| deku_read :: < DekuBits > ( & mut reader) ,
96
69
BatchSize :: SmallInput ,
97
70
)
98
71
} ) ;
99
72
c. bench_function ( "deku_write_bits" , |b| {
100
73
b. iter ( || {
101
- deku_write_bits ( black_box ( & DekuBits {
74
+ deku_write ( black_box ( & DekuBits {
102
75
data_01 : 0x0f ,
103
76
data_02 : 0x00 ,
104
77
data_03 : 0x01 ,
@@ -110,12 +83,12 @@ fn criterion_benchmark(c: &mut Criterion) {
110
83
let reader = Cursor :: new ( & [ 0x01 ; 2 ] ) ;
111
84
b. iter_batched (
112
85
|| reader. clone ( ) ,
113
- |mut reader| deku_read_enum ( & mut reader) ,
86
+ |mut reader| deku_read :: < DekuEnum > ( & mut reader) ,
114
87
BatchSize :: SmallInput ,
115
88
)
116
89
} ) ;
117
90
c. bench_function ( "deku_write_enum" , |b| {
118
- b. iter ( || deku_write_enum ( black_box ( & DekuEnum :: VariantA ( 0x02 ) ) ) )
91
+ b. iter ( || deku_write ( black_box ( & DekuEnum :: VariantA ( 0x02 ) ) ) )
119
92
} ) ;
120
93
121
94
let deku_write_vec_input = DekuVec {
@@ -126,12 +99,12 @@ fn criterion_benchmark(c: &mut Criterion) {
126
99
let reader = Cursor :: new ( & [ 0x08 ; 8 + 1 ] ) ;
127
100
b. iter_batched (
128
101
|| reader. clone ( ) ,
129
- |mut reader| deku_read_vec ( & mut reader) ,
102
+ |mut reader| deku_read :: < DekuVec > ( & mut reader) ,
130
103
BatchSize :: SmallInput ,
131
104
)
132
105
} ) ;
133
106
c. bench_function ( "deku_write_vec" , |b| {
134
- b. iter ( || deku_write_vec ( black_box ( & deku_write_vec_input) ) )
107
+ b. iter ( || deku_write ( black_box ( & deku_write_vec_input) ) )
135
108
} ) ;
136
109
}
137
110
0 commit comments