Add ReverseByteOrder(buffer)
This commit is contained in:
@@ -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);
|
||||||
|
17
main.cpp
17
main.cpp
@@ -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;
|
||||||
|
|
||||||
}
|
}
|
Reference in New Issue
Block a user