@@ -266,51 +266,40 @@ impl Drop for FileEncoder {
266
266
}
267
267
268
268
macro_rules! write_leb128 {
269
- ( $enc: expr, $value: expr, $int_ty: ty, $fun: ident) => { {
270
- const MAX_ENCODED_LEN : usize = $crate:: leb128:: max_leb128_len:: <$int_ty>( ) ;
269
+ ( $this_fn: ident, $int_ty: ty, $write_leb_fn: ident) => {
270
+ #[ inline]
271
+ fn $this_fn( & mut self , v: $int_ty) {
272
+ const MAX_ENCODED_LEN : usize = $crate:: leb128:: max_leb128_len:: <$int_ty>( ) ;
271
273
272
- // We ensure this during `FileEncoder` construction.
273
- debug_assert!( $enc . capacity( ) >= MAX_ENCODED_LEN ) ;
274
+ // We ensure this during `FileEncoder` construction.
275
+ debug_assert!( self . capacity( ) >= MAX_ENCODED_LEN ) ;
274
276
275
- let mut buffered = $enc . buffered;
277
+ let mut buffered = self . buffered;
276
278
277
- // This can't overflow. See assertion in `FileEncoder::with_capacity`.
278
- if std:: intrinsics:: unlikely( buffered + MAX_ENCODED_LEN > $enc . capacity( ) ) {
279
- $enc . flush( ) ;
280
- buffered = 0 ;
281
- }
279
+ // This can't overflow. See assertion in `FileEncoder::with_capacity`.
280
+ if std:: intrinsics:: unlikely( buffered + MAX_ENCODED_LEN > self . capacity( ) ) {
281
+ self . flush( ) ;
282
+ buffered = 0 ;
283
+ }
282
284
283
- // SAFETY: The above check and flush ensures that there is enough
284
- // room to write the encoded value to the buffer.
285
- let buf = unsafe {
286
- & mut * ( $enc. buf. as_mut_ptr( ) . add( buffered) as * mut [ MaybeUninit <u8 >; MAX_ENCODED_LEN ] )
287
- } ;
285
+ // SAFETY: The above check and flush ensures that there is enough
286
+ // room to write the encoded value to the buffer.
287
+ let buf = unsafe {
288
+ & mut * ( self . buf. as_mut_ptr( ) . add( buffered)
289
+ as * mut [ MaybeUninit <u8 >; MAX_ENCODED_LEN ] )
290
+ } ;
288
291
289
- let encoded = leb128:: $fun( buf, $value) ;
290
- $enc. buffered = buffered + encoded. len( ) ;
291
- } } ;
292
+ let encoded = leb128:: $write_leb_fn( buf, v) ;
293
+ self . buffered = buffered + encoded. len( ) ;
294
+ }
295
+ } ;
292
296
}
293
297
294
298
impl Encoder for FileEncoder {
295
- #[ inline]
296
- fn emit_usize ( & mut self , v : usize ) {
297
- write_leb128 ! ( self , v, usize , write_usize_leb128)
298
- }
299
-
300
- #[ inline]
301
- fn emit_u128 ( & mut self , v : u128 ) {
302
- write_leb128 ! ( self , v, u128 , write_u128_leb128)
303
- }
304
-
305
- #[ inline]
306
- fn emit_u64 ( & mut self , v : u64 ) {
307
- write_leb128 ! ( self , v, u64 , write_u64_leb128)
308
- }
309
-
310
- #[ inline]
311
- fn emit_u32 ( & mut self , v : u32 ) {
312
- write_leb128 ! ( self , v, u32 , write_u32_leb128)
313
- }
299
+ write_leb128 ! ( emit_usize, usize , write_usize_leb128) ;
300
+ write_leb128 ! ( emit_u128, u128 , write_u128_leb128) ;
301
+ write_leb128 ! ( emit_u64, u64 , write_u64_leb128) ;
302
+ write_leb128 ! ( emit_u32, u32 , write_u32_leb128) ;
314
303
315
304
#[ inline]
316
305
fn emit_u16 ( & mut self , v : u16 ) {
@@ -322,25 +311,10 @@ impl Encoder for FileEncoder {
322
311
self . write_one ( v) ;
323
312
}
324
313
325
- #[ inline]
326
- fn emit_isize ( & mut self , v : isize ) {
327
- write_leb128 ! ( self , v, isize , write_isize_leb128)
328
- }
329
-
330
- #[ inline]
331
- fn emit_i128 ( & mut self , v : i128 ) {
332
- write_leb128 ! ( self , v, i128 , write_i128_leb128)
333
- }
334
-
335
- #[ inline]
336
- fn emit_i64 ( & mut self , v : i64 ) {
337
- write_leb128 ! ( self , v, i64 , write_i64_leb128)
338
- }
339
-
340
- #[ inline]
341
- fn emit_i32 ( & mut self , v : i32 ) {
342
- write_leb128 ! ( self , v, i32 , write_i32_leb128)
343
- }
314
+ write_leb128 ! ( emit_isize, isize , write_isize_leb128) ;
315
+ write_leb128 ! ( emit_i128, i128 , write_i128_leb128) ;
316
+ write_leb128 ! ( emit_i64, i64 , write_i64_leb128) ;
317
+ write_leb128 ! ( emit_i32, i32 , write_i32_leb128) ;
344
318
345
319
#[ inline]
346
320
fn emit_i16 ( & mut self , v : i16 ) {
@@ -437,29 +411,19 @@ impl<'a> MemDecoder<'a> {
437
411
}
438
412
439
413
macro_rules! read_leb128 {
440
- ( $dec: expr, $fun: ident) => { { leb128:: $fun( $dec) } } ;
414
+ ( $this_fn: ident, $int_ty: ty, $read_leb_fn: ident) => {
415
+ #[ inline]
416
+ fn $this_fn( & mut self ) -> $int_ty {
417
+ leb128:: $read_leb_fn( self )
418
+ }
419
+ } ;
441
420
}
442
421
443
422
impl < ' a > Decoder for MemDecoder < ' a > {
444
- #[ inline]
445
- fn read_usize ( & mut self ) -> usize {
446
- read_leb128 ! ( self , read_usize_leb128)
447
- }
448
-
449
- #[ inline]
450
- fn read_u128 ( & mut self ) -> u128 {
451
- read_leb128 ! ( self , read_u128_leb128)
452
- }
453
-
454
- #[ inline]
455
- fn read_u64 ( & mut self ) -> u64 {
456
- read_leb128 ! ( self , read_u64_leb128)
457
- }
458
-
459
- #[ inline]
460
- fn read_u32 ( & mut self ) -> u32 {
461
- read_leb128 ! ( self , read_u32_leb128)
462
- }
423
+ read_leb128 ! ( read_usize, usize , read_usize_leb128) ;
424
+ read_leb128 ! ( read_u128, u128 , read_u128_leb128) ;
425
+ read_leb128 ! ( read_u64, u64 , read_u64_leb128) ;
426
+ read_leb128 ! ( read_u32, u32 , read_u32_leb128) ;
463
427
464
428
#[ inline]
465
429
fn read_u16 ( & mut self ) -> u16 {
@@ -479,25 +443,10 @@ impl<'a> Decoder for MemDecoder<'a> {
479
443
}
480
444
}
481
445
482
- #[ inline]
483
- fn read_isize ( & mut self ) -> isize {
484
- read_leb128 ! ( self , read_isize_leb128)
485
- }
486
-
487
- #[ inline]
488
- fn read_i128 ( & mut self ) -> i128 {
489
- read_leb128 ! ( self , read_i128_leb128)
490
- }
491
-
492
- #[ inline]
493
- fn read_i64 ( & mut self ) -> i64 {
494
- read_leb128 ! ( self , read_i64_leb128)
495
- }
496
-
497
- #[ inline]
498
- fn read_i32 ( & mut self ) -> i32 {
499
- read_leb128 ! ( self , read_i32_leb128)
500
- }
446
+ read_leb128 ! ( read_isize, isize , read_isize_leb128) ;
447
+ read_leb128 ! ( read_i128, i128 , read_i128_leb128) ;
448
+ read_leb128 ! ( read_i64, i64 , read_i64_leb128) ;
449
+ read_leb128 ! ( read_i32, i32 , read_i32_leb128) ;
501
450
502
451
#[ inline]
503
452
fn read_i16 ( & mut self ) -> i16 {
0 commit comments