Skip to content

Commit 100eabb

Browse files
committed
add std::byteswap support
Signed-off-by: Rosen Penev <[email protected]>
1 parent 8a4fa1c commit 100eabb

File tree

2 files changed

+16
-0
lines changed

2 files changed

+16
-0
lines changed

src/image.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,9 @@ bool Image::isLittleEndianPlatform() {
196196
}
197197

198198
uint64_t Image::byteSwap(uint64_t value, bool bSwap) {
199+
#ifdef __cpp_lib_byteswap
200+
return bSwap ? std::byteswap(value) : value;
201+
#else
199202
uint64_t result = 0;
200203
auto source_value = reinterpret_cast<byte*>(&value);
201204
auto destination_value = reinterpret_cast<byte*>(&result);
@@ -204,22 +207,31 @@ uint64_t Image::byteSwap(uint64_t value, bool bSwap) {
204207
destination_value[i] = source_value[8 - i - 1];
205208

206209
return bSwap ? result : value;
210+
#endif
207211
}
208212

209213
uint32_t Image::byteSwap(uint32_t value, bool bSwap) {
214+
#ifdef __cpp_lib_byteswap
215+
return bSwap ? std::byteswap(value) : value;
216+
#else
210217
uint32_t result = 0;
211218
result |= (value & 0x000000FFU) << 24;
212219
result |= (value & 0x0000FF00U) << 8;
213220
result |= (value & 0x00FF0000U) >> 8;
214221
result |= (value & 0xFF000000U) >> 24;
215222
return bSwap ? result : value;
223+
#endif
216224
}
217225

218226
uint16_t Image::byteSwap(uint16_t value, bool bSwap) {
227+
#ifdef __cpp_lib_byteswap
228+
return bSwap ? std::byteswap(value) : value;
229+
#else
219230
uint16_t result = 0;
220231
result |= (value & 0x00FFU) << 8;
221232
result |= (value & 0xFF00U) >> 8;
222233
return bSwap ? result : value;
234+
#endif
223235
}
224236

225237
uint16_t Image::byteSwap2(const DataBuf& buf, size_t offset, bool bSwap) {

src/pgfimage.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,16 @@ const unsigned char pgfBlank[] = {
2828

2929
namespace Exiv2 {
3030
static uint32_t byteSwap_(uint32_t value, bool bSwap) {
31+
#ifdef __cpp_lib_byteswap
32+
return bSwap ? std::byteswap(value) : value;
33+
#else
3134
uint32_t result = 0;
3235
result |= (value & 0x000000FF) << 24;
3336
result |= (value & 0x0000FF00) << 8;
3437
result |= (value & 0x00FF0000) >> 8;
3538
result |= (value & 0xFF000000) >> 24;
3639
return bSwap ? result : value;
40+
#endif
3741
}
3842

3943
static uint32_t byteSwap_(Exiv2::DataBuf& buf, size_t offset, bool bSwap) {

0 commit comments

Comments
 (0)