From 549df33607a145c8b6b4a8a66f9d52b2465801e6 Mon Sep 17 00:00:00 2001 From: Lachlan Deakin Date: Sun, 17 Mar 2024 10:13:36 +1100 Subject: [PATCH] Make `reverse_endianness` public --- CHANGELOG.md | 2 +- src/array/codec/array_to_bytes/bytes.rs | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0b9ebd6f..185b6153 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,7 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Implement `TryFrom<&str>` for `{Array,Group}Metadata` ### Changed - - Make `array::codec::array_to_bytes::bytes::Endianness::{is_native(),NATIVE_ENDIAN}` public + - Make `array::codec::array_to_bytes::bytes::{Endianness::is_native(),NATIVE_ENDIAN,reverse_endianness}` public ## [0.12.4] - 2024-03-09 diff --git a/src/array/codec/array_to_bytes/bytes.rs b/src/array/codec/array_to_bytes/bytes.rs index 36557be4..a9edd699 100644 --- a/src/array/codec/array_to_bytes/bytes.rs +++ b/src/array/codec/array_to_bytes/bytes.rs @@ -93,26 +93,27 @@ pub const NATIVE_ENDIAN: Endianness = if cfg!(target_endian = "big") { Endianness::Little }; -fn reverse_endianness(v: &mut [u8], data_type: &DataType) { +/// Reverse the endianness of bytes for a given data type. +pub fn reverse_endianness(v: &mut [u8], data_type: &DataType) { match data_type { DataType::Bool | DataType::Int8 | DataType::UInt8 | DataType::RawBits(_) => {} DataType::Int16 | DataType::UInt16 | DataType::Float16 | DataType::BFloat16 => { let swap = |chunk: &mut [u8]| { - let bytes = u16::from_ne_bytes(chunk.try_into().unwrap()); + let bytes = u16::from_ne_bytes(unsafe { chunk.try_into().unwrap_unchecked() }); chunk.copy_from_slice(bytes.swap_bytes().to_ne_bytes().as_slice()); }; v.chunks_exact_mut(2).for_each(swap); } DataType::Int32 | DataType::UInt32 | DataType::Float32 | DataType::Complex64 => { let swap = |chunk: &mut [u8]| { - let bytes = u32::from_ne_bytes(chunk.try_into().unwrap()); + let bytes = u32::from_ne_bytes(unsafe { chunk.try_into().unwrap_unchecked() }); chunk.copy_from_slice(bytes.swap_bytes().to_ne_bytes().as_slice()); }; v.chunks_exact_mut(4).for_each(swap); } DataType::Int64 | DataType::UInt64 | DataType::Float64 | DataType::Complex128 => { let swap = |chunk: &mut [u8]| { - let bytes = u64::from_ne_bytes(chunk.try_into().unwrap()); + let bytes = u64::from_ne_bytes(unsafe { chunk.try_into().unwrap_unchecked() }); chunk.copy_from_slice(bytes.swap_bytes().to_ne_bytes().as_slice()); }; v.chunks_exact_mut(8).for_each(swap);