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