@@ -1932,13 +1932,19 @@ macro_rules! read_slice {
1932
1932
} } ;
1933
1933
}
1934
1934
1935
+ /// Copies a &[$ty] $src into a &mut [u8] $dst for the endianness given by
1936
+ /// $from_bytes (must be either from_be_bytes or from_le_bytes).
1937
+ ///
1938
+ /// Panics if $src.len() * size_of::<$ty>() != $dst.len().
1935
1939
macro_rules! write_slice {
1936
- ( $src: expr, $dst: expr, $ty: ty, $size: expr, $write: expr) => { {
1937
- assert!( $size == :: core:: mem:: size_of:: <$ty>( ) ) ;
1938
- assert_eq!( $size * $src. len( ) , $dst. len( ) ) ;
1939
-
1940
- for ( & n, chunk) in $src. iter( ) . zip( $dst. chunks_mut( $size) ) {
1941
- $write( chunk, n) ;
1940
+ ( $src: expr, $dst: expr, $ty: ty, $to_bytes: ident) => { {
1941
+ const SIZE : usize = core:: mem:: size_of:: <$ty>( ) ;
1942
+ // Check types:
1943
+ let src: & [ $ty] = $src;
1944
+ let dst: & mut [ u8 ] = $dst;
1945
+ assert_eq!( src. len( ) * SIZE , dst. len( ) ) ;
1946
+ for ( src, dst) in src. iter( ) . zip( dst. chunks_exact_mut( SIZE ) ) {
1947
+ dst. copy_from_slice( & src. $to_bytes( ) ) ;
1942
1948
}
1943
1949
} } ;
1944
1950
}
@@ -2064,22 +2070,22 @@ impl ByteOrder for BigEndian {
2064
2070
2065
2071
#[ inline]
2066
2072
fn write_u16_into ( src : & [ u16 ] , dst : & mut [ u8 ] ) {
2067
- write_slice ! ( src, dst, u16 , 2 , Self :: write_u16 ) ;
2073
+ write_slice ! ( src, dst, u16 , to_be_bytes ) ;
2068
2074
}
2069
2075
2070
2076
#[ inline]
2071
2077
fn write_u32_into ( src : & [ u32 ] , dst : & mut [ u8 ] ) {
2072
- write_slice ! ( src, dst, u32 , 4 , Self :: write_u32 ) ;
2078
+ write_slice ! ( src, dst, u32 , to_be_bytes ) ;
2073
2079
}
2074
2080
2075
2081
#[ inline]
2076
2082
fn write_u64_into ( src : & [ u64 ] , dst : & mut [ u8 ] ) {
2077
- write_slice ! ( src, dst, u64 , 8 , Self :: write_u64 ) ;
2083
+ write_slice ! ( src, dst, u64 , to_be_bytes ) ;
2078
2084
}
2079
2085
2080
2086
#[ inline]
2081
2087
fn write_u128_into ( src : & [ u128 ] , dst : & mut [ u8 ] ) {
2082
- write_slice ! ( src, dst, u128 , 16 , Self :: write_u128 ) ;
2088
+ write_slice ! ( src, dst, u128 , to_be_bytes ) ;
2083
2089
}
2084
2090
2085
2091
#[ inline]
@@ -2248,22 +2254,22 @@ impl ByteOrder for LittleEndian {
2248
2254
2249
2255
#[ inline]
2250
2256
fn write_u16_into ( src : & [ u16 ] , dst : & mut [ u8 ] ) {
2251
- write_slice ! ( src, dst, u16 , 2 , Self :: write_u16 ) ;
2257
+ write_slice ! ( src, dst, u16 , to_le_bytes ) ;
2252
2258
}
2253
2259
2254
2260
#[ inline]
2255
2261
fn write_u32_into ( src : & [ u32 ] , dst : & mut [ u8 ] ) {
2256
- write_slice ! ( src, dst, u32 , 4 , Self :: write_u32 ) ;
2262
+ write_slice ! ( src, dst, u32 , to_le_bytes ) ;
2257
2263
}
2258
2264
2259
2265
#[ inline]
2260
2266
fn write_u64_into ( src : & [ u64 ] , dst : & mut [ u8 ] ) {
2261
- write_slice ! ( src, dst, u64 , 8 , Self :: write_u64 ) ;
2267
+ write_slice ! ( src, dst, u64 , to_le_bytes ) ;
2262
2268
}
2263
2269
2264
2270
#[ inline]
2265
2271
fn write_u128_into ( src : & [ u128 ] , dst : & mut [ u8 ] ) {
2266
- write_slice ! ( src, dst, u128 , 16 , Self :: write_u128 ) ;
2272
+ write_slice ! ( src, dst, u128 , to_le_bytes ) ;
2267
2273
}
2268
2274
2269
2275
#[ inline]
0 commit comments