diff options
author | Jean-Francois Mauguit <jfmauguit@mac.com> | 2024-09-24 09:03:25 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-24 09:03:25 -0400 |
commit | bab614c421ed7ae329d26bf028c4a3b1d2450f5a (patch) | |
tree | 12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/libvp6/include/endian.hpp | |
parent | 4bde6044fddf053f31795b9eaccdd2a5a527d21f (diff) | |
parent | 20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (diff) | |
download | winamp-bab614c421ed7ae329d26bf028c4a3b1d2450f5a.tar.gz |
Merge pull request #5 from WinampDesktop/community
Merge to main
Diffstat (limited to 'Src/libvp6/include/endian.hpp')
-rw-r--r-- | Src/libvp6/include/endian.hpp | 202 |
1 files changed, 202 insertions, 0 deletions
diff --git a/Src/libvp6/include/endian.hpp b/Src/libvp6/include/endian.hpp new file mode 100644 index 00000000..cb26e7ad --- /dev/null +++ b/Src/libvp6/include/endian.hpp @@ -0,0 +1,202 @@ +#if !defined(ENDIAN_HPP) +#define ENDIAN_HPP +//______________________________________________________________________________ +// +// endian.hpp +// Facilitate endian conversions. + +//namespace xxx +//{ + + //-------------------------------------- + inline + bool big_endian() + { + long lTest = 1; + + return (reinterpret_cast<char*>(&lTest)[0] == 0); + } + + //-------------------------------------- + inline + short swap_endian(short i16) + { + return i16 << 8 & 0xff00 + | i16 >> 8 & 0x00ff; + } + + //-------------------------------------- + inline + unsigned short swap_endian(unsigned short ui16) + { + return ui16 << 8 & 0xff00 + | ui16 >> 8 & 0x00ff; + } + + //-------------------------------------- + inline + unsigned int swap_endian(unsigned int i32) + { + return i32 << 24 & 0xff000000 + | i32 << 8 & 0x00ff0000 + | i32 >> 8 & 0x0000ff00 + | i32 >> 24 & 0x000000ff; + } + + //-------------------------------------- + inline + int swap_endian(int ui32) + { + return ui32 << 24 & 0xff000000 + | ui32 << 8 & 0x00ff0000 + | ui32 >> 8 & 0x0000ff00 + | ui32 >> 24 & 0x000000ff; + } + + //-------------------------------------- + inline + short big_endian(short i16Native) + { + if (big_endian()) + { + return i16Native; + } + + return swap_endian(i16Native); + } + + //-------------------------------------- + inline + unsigned short big_endian(unsigned short ui16Native) + { + if (big_endian()) + { + return ui16Native; + } + + return swap_endian(ui16Native); + } + + //-------------------------------------- + inline + unsigned int big_endian(unsigned int i32Native) + { + if (big_endian()) + { + return i32Native; + } + + return swap_endian(i32Native); + } + + //-------------------------------------- + inline + int big_endian(int ui32Native) + { + if (big_endian()) + { + return ui32Native; + } + + return swap_endian(ui32Native); + } + + //-------------------------------------- + inline + short little_endian(short i16Native) + { + if (!big_endian()) + { + return i16Native; + } + + return swap_endian(i16Native); + } + + //-------------------------------------- + inline + unsigned short little_endian(unsigned short ui16Native) + { + if (!big_endian()) + { + return ui16Native; + } + + return swap_endian(ui16Native); + } + + //-------------------------------------- + inline + unsigned int little_endian(unsigned int i32Native) + { + if (!big_endian()) + { + return i32Native; + } + + return swap_endian(i32Native); + } + + //-------------------------------------- + inline + int little_endian(int ui32Native) + { + if (!big_endian()) + { + return ui32Native; + } + + return swap_endian(ui32Native); + } + + //-------------------------------------- + inline + short native_endian(short i16, bool bBigEndian) + { + if (big_endian() != bBigEndian) + { + return swap_endian(i16); + } + + return i16; + } + + //-------------------------------------- + inline + unsigned short native_endian(unsigned short ui16, bool bBigEndian) + { + if (big_endian() != bBigEndian) + { + return swap_endian(ui16); + } + + return ui16; + } + + //-------------------------------------- + inline + unsigned int native_endian(unsigned int i32, bool bBigEndian) + { + if (big_endian() != bBigEndian) + { + return swap_endian(i32); + } + + return i32; + } + + //-------------------------------------- + inline + int native_endian(int ui32, bool bBigEndian) + { + if (big_endian() != bBigEndian) + { + return swap_endian(ui32); + } + + return ui32; + } + +//} // namespace xxx + +#endif // ENDIAN_HPP |