From a29e8cb6bd3976a117726961459446637919558a Mon Sep 17 00:00:00 2001 From: josh Date: Mon, 9 Jun 2025 15:35:03 -0500 Subject: [PATCH] Add ReverseByteOrder(buffer) --- include/Endianness.hpp | 18 ++++++++++++++++++ main.cpp | 17 +++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/include/Endianness.hpp b/include/Endianness.hpp index fc3370a..9047736 100644 --- a/include/Endianness.hpp +++ b/include/Endianness.hpp @@ -48,6 +48,24 @@ namespace Endianness return retVal; } + + template + void ReverseByteOrder(T* buffer, size_t length) + { + // Compile-time check to ensure T is an integral type and not bool + // (single-byte types like char, int8_t don't need byte reversal) + static_assert(std::is_integral_v, "ReverseByteOrder (buffer): Type T must be an integral type."); + static_assert(sizeof(T) > 1, "ReverseByteOrder (buffer): Type T must be larger than 1 byte for byte reversal."); + + if (!buffer || length == 0) { + return; // Nothing to do + } + + for (size_t i = 0; i < length; ++i) { + buffer[i] = ReverseByteOrder(buffer[i]); // Call the single-value function + } + } + #pragma region Template Specializations /// This function simply returns the input value, as no byte order can be swapped on a single-byte-length value. template <> u8 ReverseByteOrder(u8 val); diff --git a/main.cpp b/main.cpp index 8585328..26cf3dc 100644 --- a/main.cpp +++ b/main.cpp @@ -64,6 +64,21 @@ void TestReverseByteOrderIfLittleEndian(const std::string& type_name, T original std::cout << std::endl; } + +void TestBuffer() +{ + int data[500]; + + for (int i = 0; i < 500; i++) + { + data[i] = i*5; + } + + Endianness::ReverseByteOrder(data, 500); + + Endianness::ReverseByteOrder(data, 500); +} + int main() { for (int i = 0; i < 256; i++) @@ -75,6 +90,8 @@ int main() TestRoundTrip("float", i / 3.14159f); } + TestBuffer(); + return 0; } \ No newline at end of file