Add ReverseByteOrder(buffer)

This commit is contained in:
2025-06-09 15:35:03 -05:00
parent 70d721aef3
commit a29e8cb6bd
2 changed files with 35 additions and 0 deletions

View File

@@ -48,6 +48,24 @@ namespace Endianness
return retVal; return retVal;
} }
template <typename T>
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<T>, "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 #pragma region Template Specializations
/// This function simply returns the input value, as no byte order can be swapped on a single-byte-length value. /// This function simply returns the input value, as no byte order can be swapped on a single-byte-length value.
template <> u8 ReverseByteOrder<u8>(u8 val); template <> u8 ReverseByteOrder<u8>(u8 val);

View File

@@ -64,6 +64,21 @@ void TestReverseByteOrderIfLittleEndian(const std::string& type_name, T original
std::cout << std::endl; 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() int main()
{ {
for (int i = 0; i < 256; i++) for (int i = 0; i < 256; i++)
@@ -75,6 +90,8 @@ int main()
TestRoundTrip<float>("float", i / 3.14159f); TestRoundTrip<float>("float", i / 3.14159f);
} }
TestBuffer();
return 0; return 0;
} }