diff --git a/Source/diablo.h b/Source/diablo.h index 854ddf390..41154f479 100644 --- a/Source/diablo.h +++ b/Source/diablo.h @@ -7,6 +7,8 @@ #include +#include "utils/endian.hpp" + #ifdef _DEBUG #include "monstdat.h" #endif diff --git a/Source/engine.h b/Source/engine.h index ad59b3dc4..cb48b5a28 100644 --- a/Source/engine.h +++ b/Source/engine.h @@ -37,6 +37,7 @@ #include "engine/point.hpp" #include "engine/size.hpp" #include "miniwin/miniwin.h" +#include "utils/endian.hpp" #include "utils/stdcompat/cstddef.hpp" #define TILE_WIDTH 64 @@ -51,22 +52,6 @@ inline byte *CelGetFrameStart(byte *pCelBuff, int nCel) return &pCelBuff[SDL_SwapLE32(pFrameTable[nCel])]; } -template -constexpr uint32_t LoadLE32(const T *b) -{ - static_assert(sizeof(T) == 1, "invalid argument"); - - return ((uint32_t)(b)[3] << 24) | ((uint32_t)(b)[2] << 16) | ((uint32_t)(b)[1] << 8) | (uint32_t)(b)[0]; -} - -template -constexpr uint32_t LoadBE32(const T *b) -{ - static_assert(sizeof(T) == 1, "invalid argument"); - - return ((uint32_t)(b)[0] << 24) | ((uint32_t)(b)[1] << 16) | ((uint32_t)(b)[2] << 8) | (uint32_t)(b)[3]; -} - inline byte *CelGetFrame(byte *pCelBuff, int nCel, int *nDataSize) { const uint32_t nCellStart = LoadLE32(&pCelBuff[nCel * sizeof(std::uint32_t)]); diff --git a/Source/loadsave.cpp b/Source/loadsave.cpp index 039b96275..e67dfe2af 100644 --- a/Source/loadsave.cpp +++ b/Source/loadsave.cpp @@ -23,6 +23,7 @@ #include "mpqapi.h" #include "pfile.h" #include "stores.h" +#include "utils/endian.hpp" #include "utils/language.h" namespace devilution { diff --git a/Source/mpqapi.cpp b/Source/mpqapi.cpp index dd3571788..21fca1474 100644 --- a/Source/mpqapi.cpp +++ b/Source/mpqapi.cpp @@ -17,6 +17,7 @@ #include "appfat.h" #include "encrypt.h" #include "engine.h" +#include "utils/endian.hpp" #include "utils/file_util.h" #include "utils/log.hpp" diff --git a/Source/multi.cpp b/Source/multi.cpp index 81c7a738e..c696a9957 100644 --- a/Source/multi.cpp +++ b/Source/multi.cpp @@ -21,6 +21,7 @@ #include "storm/storm.h" #include "sync.h" #include "tmsg.h" +#include "utils/endian.hpp" #include "utils/language.h" namespace devilution { diff --git a/Source/pack.cpp b/Source/pack.cpp index 254ff67ca..8e8d94cf1 100644 --- a/Source/pack.cpp +++ b/Source/pack.cpp @@ -8,6 +8,7 @@ #include "init.h" #include "loadsave.h" #include "stores.h" +#include "utils/endian.hpp" namespace devilution { diff --git a/Source/pfile.cpp b/Source/pfile.cpp index f2cd92806..64d10cd12 100644 --- a/Source/pfile.cpp +++ b/Source/pfile.cpp @@ -15,6 +15,7 @@ #include "mpqapi.h" #include "pack.h" #include "storm/storm.h" +#include "utils/endian.hpp" #include "utils/file_util.h" #include "utils/language.h" #include "utils/paths.h" diff --git a/Source/scrollrt.cpp b/Source/scrollrt.cpp index 57caae772..794f5c8a2 100644 --- a/Source/scrollrt.cpp +++ b/Source/scrollrt.cpp @@ -24,11 +24,12 @@ #include "missiles.h" #include "nthread.h" #include "plrmsg.h" +#include "qol/itemlabels.h" #include "qol/monhealthbar.h" #include "qol/xpbar.h" -#include "qol/itemlabels.h" #include "stores.h" #include "towners.h" +#include "utils/endian.hpp" #include "utils/log.hpp" #ifdef _DEBUG diff --git a/Source/utils/endian.hpp b/Source/utils/endian.hpp new file mode 100644 index 000000000..51c740808 --- /dev/null +++ b/Source/utils/endian.hpp @@ -0,0 +1,23 @@ +#pragma once + +#include + +namespace devilution { + +template +constexpr std::uint32_t LoadLE32(const T *b) +{ + static_assert(sizeof(T) == 1, "invalid argument"); + // NOLINTNEXTLINE(readability-magic-numbers) + return (static_cast(b[3]) << 24) | (static_cast(b[2]) << 16) | (static_cast(b[1]) << 8) | static_cast(b[0]); +} + +template +constexpr std::uint32_t LoadBE32(const T *b) +{ + static_assert(sizeof(T) == 1, "invalid argument"); + // NOLINTNEXTLINE(readability-magic-numbers) + return (static_cast(b[0]) << 24) | (static_cast(b[1]) << 16) | (static_cast(b[2]) << 8) | static_cast(b[3]); +} + +} // namespace devilution