Skip to content

Commit c01f0fe

Browse files
mina86BurntSushi
authored andcommitted
impl: eliminate special case checking target_endian
The compiler is smart enough that it notices when endianess conversion is not necessary and it simplifies copying with a conversion into plain memcpy. This means there’s no need to check target_endian and use unsafe_write_slice_native macro.
1 parent 3409ee1 commit c01f0fe

File tree

1 file changed

+8
-61
lines changed

1 file changed

+8
-61
lines changed

src/lib.rs

+8-61
Original file line numberDiff line numberDiff line change
@@ -1932,27 +1932,6 @@ macro_rules! read_slice {
19321932
}};
19331933
}
19341934

1935-
/// Copies a &[$ty] $src into a &mut [u8] $dst, where $ty must be a numeric
1936-
/// type. This panics if size_of::<$ty>() * $src.len() != $dst.len().
1937-
///
1938-
/// This macro is only safe to call when $src is a slice of numeric types and
1939-
/// $dst is a &mut [u8] and where $ty represents the type of the integers in
1940-
/// $src.
1941-
macro_rules! unsafe_write_slice_native {
1942-
($src:expr, $dst:expr, $ty:ty) => {{
1943-
let size = core::mem::size_of::<$ty>();
1944-
assert_eq!(size * $src.len(), $dst.len());
1945-
1946-
unsafe {
1947-
copy_nonoverlapping(
1948-
$src.as_ptr() as *const u8,
1949-
$dst.as_mut_ptr(),
1950-
$dst.len(),
1951-
);
1952-
}
1953-
}};
1954-
}
1955-
19561935
macro_rules! write_slice {
19571936
($src:expr, $dst:expr, $ty:ty, $size:expr, $write:expr) => {{
19581937
assert!($size == ::core::mem::size_of::<$ty>());
@@ -2085,38 +2064,22 @@ impl ByteOrder for BigEndian {
20852064

20862065
#[inline]
20872066
fn write_u16_into(src: &[u16], dst: &mut [u8]) {
2088-
if cfg!(target_endian = "big") {
2089-
unsafe_write_slice_native!(src, dst, u16);
2090-
} else {
2091-
write_slice!(src, dst, u16, 2, Self::write_u16);
2092-
}
2067+
write_slice!(src, dst, u16, 2, Self::write_u16);
20932068
}
20942069

20952070
#[inline]
20962071
fn write_u32_into(src: &[u32], dst: &mut [u8]) {
2097-
if cfg!(target_endian = "big") {
2098-
unsafe_write_slice_native!(src, dst, u32);
2099-
} else {
2100-
write_slice!(src, dst, u32, 4, Self::write_u32);
2101-
}
2072+
write_slice!(src, dst, u32, 4, Self::write_u32);
21022073
}
21032074

21042075
#[inline]
21052076
fn write_u64_into(src: &[u64], dst: &mut [u8]) {
2106-
if cfg!(target_endian = "big") {
2107-
unsafe_write_slice_native!(src, dst, u64);
2108-
} else {
2109-
write_slice!(src, dst, u64, 8, Self::write_u64);
2110-
}
2077+
write_slice!(src, dst, u64, 8, Self::write_u64);
21112078
}
21122079

21132080
#[inline]
21142081
fn write_u128_into(src: &[u128], dst: &mut [u8]) {
2115-
if cfg!(target_endian = "big") {
2116-
unsafe_write_slice_native!(src, dst, u128);
2117-
} else {
2118-
write_slice!(src, dst, u128, 16, Self::write_u128);
2119-
}
2082+
write_slice!(src, dst, u128, 16, Self::write_u128);
21202083
}
21212084

21222085
#[inline]
@@ -2285,38 +2248,22 @@ impl ByteOrder for LittleEndian {
22852248

22862249
#[inline]
22872250
fn write_u16_into(src: &[u16], dst: &mut [u8]) {
2288-
if cfg!(target_endian = "little") {
2289-
unsafe_write_slice_native!(src, dst, u16);
2290-
} else {
2291-
write_slice!(src, dst, u16, 2, Self::write_u16);
2292-
}
2251+
write_slice!(src, dst, u16, 2, Self::write_u16);
22932252
}
22942253

22952254
#[inline]
22962255
fn write_u32_into(src: &[u32], dst: &mut [u8]) {
2297-
if cfg!(target_endian = "little") {
2298-
unsafe_write_slice_native!(src, dst, u32);
2299-
} else {
2300-
write_slice!(src, dst, u32, 4, Self::write_u32);
2301-
}
2256+
write_slice!(src, dst, u32, 4, Self::write_u32);
23022257
}
23032258

23042259
#[inline]
23052260
fn write_u64_into(src: &[u64], dst: &mut [u8]) {
2306-
if cfg!(target_endian = "little") {
2307-
unsafe_write_slice_native!(src, dst, u64);
2308-
} else {
2309-
write_slice!(src, dst, u64, 8, Self::write_u64);
2310-
}
2261+
write_slice!(src, dst, u64, 8, Self::write_u64);
23112262
}
23122263

23132264
#[inline]
23142265
fn write_u128_into(src: &[u128], dst: &mut [u8]) {
2315-
if cfg!(target_endian = "little") {
2316-
unsafe_write_slice_native!(src, dst, u128);
2317-
} else {
2318-
write_slice!(src, dst, u128, 16, Self::write_u128);
2319-
}
2266+
write_slice!(src, dst, u128, 16, Self::write_u128);
23202267
}
23212268

23222269
#[inline]

0 commit comments

Comments
 (0)