forked from HeliumProject/Foundation
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Endian.h
60 lines (49 loc) · 1.88 KB
/
Endian.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#pragma once
#include "Platform/Types.h"
#include "Platform/Assert.h"
#include "Platform/Utility.h"
namespace Helium
{
namespace ByteOrders
{
enum ByteOrder
{
LittleEndian = 0, // little endian
BigEndian, // big endian
Unknown // used to indicate that we do not yet know a byte order, not counted towards the 'Count'
};
}
typedef ByteOrders::ByteOrder ByteOrder;
#if HELIUM_ENDIAN_LITTLE
const static ByteOrder PlatformByteOrder = ByteOrders::LittleEndian;
#else
const static ByteOrder PlatformByteOrder = ByteOrders::BigEndian;
#endif
union U64F64
{
float64_t m_f64;
uint64_t m_u64;
};
union U32F32
{
float32_t m_f32;
uint32_t m_u32;
};
inline uint64_t ConvertEndian(uint64_t val, bool endian = true);
inline int64_t ConvertEndian(int64_t val, bool endian = true);
inline float64_t ConvertEndian(float64_t val, bool endian = true);
inline uint64_t ConvertEndianDoubleToU64(float64_t val, bool endian = true);
inline float64_t ConvertEndianU64ToDouble(uint64_t val, bool endian = true);
inline uint32_t ConvertEndian(uint32_t val, bool endian = true);
inline int32_t ConvertEndian(int32_t val, bool endian = true);
inline float32_t ConvertEndian(float32_t val, bool endian = true);
inline uint32_t ConvertEndianFloatToU32(float32_t val, bool endian = true);
inline float32_t ConvertEndianU32ToFloat(uint32_t val, bool endian = true);
inline uint16_t ConvertEndian(uint16_t val, bool endian = true);
inline int16_t ConvertEndian(int16_t val, bool endian = true);
inline uint8_t ConvertEndian(uint8_t val, bool endian = true);
inline int8_t ConvertEndian(int8_t val, bool endian = true);
template<class T>
inline void Swizzle(T& val, bool swizzle = true);
}
#include "Foundation/Endian.inl"