1 /+ 2 + Copyright 2022 – 2024 Aya Partridge 3 + Distributed under the Boost Software License, Version 1.0. 4 + (See accompanying file LICENSE_1_0.txt or copy at 5 + http://www.boost.org/LICENSE_1_0.txt) 6 +/ 7 module sdl.endian; 8 9 import bindbc.sdl.config; 10 import bindbc.sdl.codegen; 11 12 import sdl.stdinc; 13 14 pragma(inline, true) nothrow @nogc pure @safe{ 15 ushort SDL_Swap16(ushort x){ 16 return cast(ushort)( 17 (x << 8) | 18 (x >> 8) 19 ); 20 } 21 uint SDL_Swap32(uint x){ 22 return cast(uint)( 23 (x << 24) | 24 ((x << 8) & 0x00FF0000) | 25 ((x >> 8) & 0x0000FF00) | 26 (x >> 24) 27 ); 28 } 29 ulong SDL_Swap64(ulong x){ 30 uint lo = cast(uint)(x & 0xFFFFFFFF); 31 x >>= 32; 32 uint hi = cast(uint)(x & 0xFFFFFFFF); 33 x = SDL_Swap32(lo); 34 x <<= 32; 35 x |= SDL_Swap32(hi); 36 return x; 37 } 38 float SDL_SwapFloat(float x){ 39 union Swapper{ 40 float f; 41 uint ui32; 42 } 43 Swapper swapper = {f: x}; 44 swapper.ui32 = SDL_Swap32(swapper.ui32); 45 return swapper.f; 46 } 47 48 version(LittleEndian){ 49 ushort SDL_SwapLE16(ushort X){ return X; } 50 uint SDL_SwapLE32(uint X){ return X; } 51 ulong SDL_SwapLE64(ulong X){ return X; } 52 float SDL_SwapFloatLE(float X){ return X; } 53 54 ushort SDL_SwapBE16(ushort X){ return SDL_Swap16(X); } 55 uint SDL_SwapBE32(uint X){ return SDL_Swap32(X); } 56 ulong SDL_SwapBE64(ulong X){ return SDL_Swap64(X); } 57 float SDL_SwapFloatBE(float X){ return SDL_SwapFloat(X); } 58 }else{ 59 ushort SDL_SwapLE16(ushort X){ return SDL_Swap16(X); } 60 uint SDL_SwapLE32(uint X){ return SDL_Swap32(X); } 61 ulong SDL_SwapLE64(ulong X){ return SDL_Swap64(X); } 62 float SDL_SwapFloatLE(float X){ return SDL_SwapFloat(X); } 63 64 ushort SDL_SwapBE16(ushort X){ return X; } 65 uint SDL_SwapBE32(uint X){ return X; } 66 ulong SDL_SwapBE64(ulong X){ return X; } 67 float SDL_SwapFloatBE(float X){ return X; } 68 } 69 }