add std::byteswap support

Signed-off-by: Rosen Penev <rosenp@gmail.com>
main
Rosen Penev 2 years ago
parent 8a4fa1c146
commit 100eabbc08

@ -196,6 +196,9 @@ bool Image::isLittleEndianPlatform() {
}
uint64_t Image::byteSwap(uint64_t value, bool bSwap) {
#ifdef __cpp_lib_byteswap
return bSwap ? std::byteswap(value) : value;
#else
uint64_t result = 0;
auto source_value = reinterpret_cast<byte*>(&value);
auto destination_value = reinterpret_cast<byte*>(&result);
@ -204,22 +207,31 @@ uint64_t Image::byteSwap(uint64_t value, bool bSwap) {
destination_value[i] = source_value[8 - i - 1];
return bSwap ? result : value;
#endif
}
uint32_t Image::byteSwap(uint32_t value, bool bSwap) {
#ifdef __cpp_lib_byteswap
return bSwap ? std::byteswap(value) : value;
#else
uint32_t result = 0;
result |= (value & 0x000000FFU) << 24;
result |= (value & 0x0000FF00U) << 8;
result |= (value & 0x00FF0000U) >> 8;
result |= (value & 0xFF000000U) >> 24;
return bSwap ? result : value;
#endif
}
uint16_t Image::byteSwap(uint16_t value, bool bSwap) {
#ifdef __cpp_lib_byteswap
return bSwap ? std::byteswap(value) : value;
#else
uint16_t result = 0;
result |= (value & 0x00FFU) << 8;
result |= (value & 0xFF00U) >> 8;
return bSwap ? result : value;
#endif
}
uint16_t Image::byteSwap2(const DataBuf& buf, size_t offset, bool bSwap) {

@ -28,12 +28,16 @@ const unsigned char pgfBlank[] = {
namespace Exiv2 {
static uint32_t byteSwap_(uint32_t value, bool bSwap) {
#ifdef __cpp_lib_byteswap
return bSwap ? std::byteswap(value) : value;
#else
uint32_t result = 0;
result |= (value & 0x000000FF) << 24;
result |= (value & 0x0000FF00) << 8;
result |= (value & 0x00FF0000) >> 8;
result |= (value & 0xFF000000) >> 24;
return bSwap ? result : value;
#endif
}
static uint32_t byteSwap_(Exiv2::DataBuf& buf, size_t offset, bool bSwap) {

Loading…
Cancel
Save