Add ReverseByteOrder(buffer)
This commit is contained in:
@@ -48,6 +48,24 @@ namespace Endianness
|
||||
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
|
||||
/// 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);
|
||||
|
17
main.cpp
17
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>("float", i / 3.14159f);
|
||||
}
|
||||
|
||||
TestBuffer();
|
||||
|
||||
return 0;
|
||||
|
||||
}
|
Reference in New Issue
Block a user