1 /* SPDX-License-Identifier: BSD-3-Clause */ 2 /* SPDX-FileCopyrightText: OpenMPT Project Developers and Contributors */ 3 4 5 #pragma once 6 7 #include "openmpt/all/BuildSettings.hpp" 8 9 #include "mpt/base/bit.hpp" 10 #include "mpt/base/memory.hpp" 11 #include "mpt/endian/floatingpoint.hpp" 12 #include "mpt/endian/integer.hpp" 13 #include "openmpt/base/Types.hpp" 14 15 16 17 OPENMPT_NAMESPACE_BEGIN 18 19 20 21 using int64le = mpt::packed<int64, mpt::LittleEndian_tag>; 22 using int32le = mpt::packed<int32, mpt::LittleEndian_tag>; 23 using int16le = mpt::packed<int16, mpt::LittleEndian_tag>; 24 using int8le = mpt::packed<int8, mpt::LittleEndian_tag>; 25 using uint64le = mpt::packed<uint64, mpt::LittleEndian_tag>; 26 using uint32le = mpt::packed<uint32, mpt::LittleEndian_tag>; 27 using uint16le = mpt::packed<uint16, mpt::LittleEndian_tag>; 28 using uint8le = mpt::packed<uint8, mpt::LittleEndian_tag>; 29 30 using int64be = mpt::packed<int64, mpt::BigEndian_tag>; 31 using int32be = mpt::packed<int32, mpt::BigEndian_tag>; 32 using int16be = mpt::packed<int16, mpt::BigEndian_tag>; 33 using int8be = mpt::packed<int8, mpt::BigEndian_tag>; 34 using uint64be = mpt::packed<uint64, mpt::BigEndian_tag>; 35 using uint32be = mpt::packed<uint32, mpt::BigEndian_tag>; 36 using uint16be = mpt::packed<uint16, mpt::BigEndian_tag>; 37 using uint8be = mpt::packed<uint8, mpt::BigEndian_tag>; 38 39 40 41 using IEEE754binary32LE = mpt::IEEE754binary_types<mpt::float_traits<float32>::is_ieee754_binary32ne, mpt::endian::native>::IEEE754binary32LE; 42 using IEEE754binary32BE = mpt::IEEE754binary_types<mpt::float_traits<float32>::is_ieee754_binary32ne, mpt::endian::native>::IEEE754binary32BE; 43 using IEEE754binary64LE = mpt::IEEE754binary_types<mpt::float_traits<float64>::is_ieee754_binary64ne, mpt::endian::native>::IEEE754binary64LE; 44 using IEEE754binary64BE = mpt::IEEE754binary_types<mpt::float_traits<float64>::is_ieee754_binary64ne, mpt::endian::native>::IEEE754binary64BE; 45 46 47 // unaligned 48 49 using float32le = mpt::IEEE754binary32EmulatedLE; 50 using float32be = mpt::IEEE754binary32EmulatedBE; 51 using float64le = mpt::IEEE754binary64EmulatedLE; 52 using float64be = mpt::IEEE754binary64EmulatedBE; 53 54 55 // potentially aligned 56 57 using float32le_fast = mpt::IEEE754binary32LE; 58 using float32be_fast = mpt::IEEE754binary32BE; 59 using float64le_fast = mpt::IEEE754binary64LE; 60 using float64be_fast = mpt::IEEE754binary64BE; 61 62 63 64 #define MPT_BINARY_STRUCT(type, size) \ 65 constexpr bool declare_binary_safe(const type &) { return true; } \ 66 static_assert(mpt::check_binary_size<type>(size)); \ 67 /**/ 68 69 70 71 OPENMPT_NAMESPACE_END 72