1 /+ 2 + Copyright 2022 – 2023 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) | ((x << 8) & 0x00FF0000) | 24 ((x >> 8) & 0x0000FF00) | (x >> 24) 25 ); 26 } 27 ulong SDL_Swap64(ulong x){ 28 uint lo = cast(uint)(x & 0xFFFFFFFF); 29 x >>= 32; 30 uint hi = cast(uint)(x & 0xFFFFFFFF); 31 x = SDL_Swap32(lo); 32 x <<= 32; 33 x |= SDL_Swap32(hi); 34 return x; 35 } 36 float SDL_SwapFloat(float x){ 37 union Swapper{ 38 float f; 39 uint ui32; 40 } 41 Swapper swapper = {f: x}; 42 swapper.ui32 = SDL_Swap32(swapper.ui32); 43 return swapper.f; 44 } 45 46 version(LittleEndian){ 47 ushort SDL_SwapLE16(ushort X){ return X; } 48 uint SDL_SwapLE32(uint X){ return X; } 49 ulong SDL_SwapLE64(ulong X){ return X; } 50 float SDL_SwapFloatLE(float X){ return X; } 51 52 ushort SDL_SwapBE16(ushort X){ return SDL_Swap16(X); } 53 uint SDL_SwapBE32(uint X){ return SDL_Swap32(X); } 54 ulong SDL_SwapBE64(ulong X){ return SDL_Swap64(X); } 55 float SDL_SwapFloatBE(float X){ return SDL_SwapFloat(X); } 56 }else{ 57 ushort SDL_SwapLE16(ushort X){ return SDL_Swap16(X); } 58 uint SDL_SwapLE32(uint X){ return SDL_Swap32(X); } 59 ulong SDL_SwapLE64(ulong X){ return SDL_Swap64(X); } 60 float SDL_SwapFloatLE(float X){ return SDL_SwapFloat(X); } 61 62 ushort SDL_SwapBE16(ushort X){ return X; } 63 uint SDL_SwapBE32(uint X){ return X; } 64 ulong SDL_SwapBE64(ulong X){ return X; } 65 float SDL_SwapFloatBE(float X){ return X; } 66 } 67 } 68 69 mixin(joinFnBinds((){ 70 string[][] ret; 71 return ret; 72 }()));