11use std:: time:: Instant ;
22
3- use compact_encoding:: { CompactEncoding , State } ;
3+ use compact_encoding:: {
4+ fixed_buffer_from_encoded_size, map_decode, map_encode, sum_encoded_size, CompactEncoding ,
5+ EncodingError ,
6+ } ;
47use criterion:: { black_box, criterion_group, criterion_main, Criterion } ;
58
69const U32_VALUE : u32 = 0xF0E1D2C3 ;
710const STR_VALUE : & str = "foo" ;
811const U64_VALUE : u64 = u64:: MAX ;
912
10- fn preencode ( ) -> State {
11- let mut enc_state = State :: new ( ) ;
12- enc_state. preencode ( & U32_VALUE ) . unwrap ( ) ;
13- enc_state. preencode_str ( STR_VALUE ) . unwrap ( ) ;
14- enc_state. preencode ( & U64_VALUE ) . unwrap ( ) ;
15- enc_state
13+ fn preencode ( ) -> Result < usize , EncodingError > {
14+ Ok ( sum_encoded_size ! ( U32_VALUE , STR_VALUE , U64_VALUE ) )
1615}
1716
18- fn encode ( enc_state : & mut State , buffer : & mut [ u8 ] ) {
19- enc_state. encode ( & U32_VALUE , buffer) . unwrap ( ) ;
20- enc_state. encode_str ( STR_VALUE , buffer) . unwrap ( ) ;
21- enc_state. encode ( & U64_VALUE , buffer) . unwrap ( ) ;
17+ fn encode ( buffer : & mut Box < [ u8 ] > ) -> Result < ( ) , EncodingError > {
18+ let _ = map_encode ! ( buffer, U32_VALUE , STR_VALUE , U64_VALUE ) ;
19+ Ok ( ( ) )
2220}
2321
24- fn decode ( dec_state : & mut State , buffer : & [ u8 ] ) {
25- let _: u32 = dec_state. decode ( buffer) . unwrap ( ) ;
26- let _: String = dec_state. decode ( buffer) . unwrap ( ) ;
27- let _: u64 = dec_state. decode ( buffer) . unwrap ( ) ;
22+ fn decode ( buffer : & [ u8 ] ) -> Result < ( ) , EncodingError > {
23+ map_decode ! ( buffer, [ u32 , String , u64 ] ) ;
24+ Ok ( ( ) )
2825}
2926
3027fn preencode_generic_simple ( c : & mut Criterion ) {
@@ -36,10 +33,10 @@ fn preencode_generic_simple(c: &mut Criterion) {
3633fn create_buffer_generic_simple ( c : & mut Criterion ) {
3734 c. bench_function ( "create buffer generic simple" , |b| {
3835 b. iter_custom ( |iters| {
39- let enc_state = preencode ( ) ;
36+ let encoded_size = preencode ( ) . unwrap ( ) ;
4037 let start = Instant :: now ( ) ;
4138 for _ in 0 ..iters {
42- black_box ( enc_state . create_buffer ( ) ) ;
39+ black_box ( fixed_buffer_from_encoded_size ( encoded_size ) ) ;
4340 }
4441 start. elapsed ( )
4542 } ) ;
@@ -50,13 +47,12 @@ fn create_buffer_generic_simple(c: &mut Criterion) {
5047fn encode_generic_simple ( c : & mut Criterion ) {
5148 c. bench_function ( "encode generic simple" , |b| {
5249 b. iter_custom ( |iters| {
53- let enc_state = preencode ( ) ;
54- let buffer = enc_state . create_buffer ( ) ;
50+ let encoded_size = preencode ( ) . unwrap ( ) ;
51+ let buffer = fixed_buffer_from_encoded_size ( encoded_size ) ;
5552 let start = Instant :: now ( ) ;
5653 for _ in 0 ..iters {
57- let mut enc_state = enc_state. clone ( ) ;
5854 let mut buffer = buffer. clone ( ) ;
59- black_box ( encode ( & mut enc_state , & mut buffer) ) ;
55+ black_box ( encode ( & mut buffer) . unwrap ( ) ) ;
6056 }
6157 start. elapsed ( )
6258 } ) ;
@@ -67,15 +63,13 @@ fn encode_generic_simple(c: &mut Criterion) {
6763fn decode_generic_simple ( c : & mut Criterion ) {
6864 c. bench_function ( "decode generic simple" , |b| {
6965 b. iter_custom ( |iters| {
70- let mut enc_state = preencode ( ) ;
71- let mut buffer = enc_state. create_buffer ( ) ;
72- encode ( & mut enc_state, & mut buffer) ;
73- let dec_state = State :: from_buffer ( & buffer) ;
66+ let encoded_size = preencode ( ) . unwrap ( ) ;
67+ let mut buffer = fixed_buffer_from_encoded_size ( encoded_size) ;
68+ encode ( & mut buffer) . unwrap ( ) ;
7469 let start = Instant :: now ( ) ;
7570 for _ in 0 ..iters {
76- let mut dec_state = dec_state. clone ( ) ;
7771 let buffer = buffer. clone ( ) ;
78- black_box ( decode ( & mut dec_state , & buffer) ) ;
72+ black_box ( decode ( & buffer) . unwrap ( ) ) ;
7973 }
8074 start. elapsed ( )
8175 } ) ;
0 commit comments