FFL
Loading...
Searching...
No Matches
FFLiSwapEndian.h
Go to the documentation of this file.
1#ifndef FFLI_SWAP_ENDIAN_H_
2#define FFLI_SWAP_ENDIAN_H_
3
4#include <nn/ffl/types.h>
5
6#include <algorithm>
7
14
21
22u32 FFLiSwapEndianGroup(void* ptr, const FFLiSwapEndianDesc* pDesc, u32 num);
23
24#ifdef __ghs__
25#pragma ghs nowarning 186
26#endif
27
28template <typename T>
30{
31 const u32 count = sizeof(T);
32 NN_STATIC_ASSERT(count == 1 || count % 2 == 0);
33 const u32 count_2 = count / 2;
34
35 union {
36 T value;
37 u8 data[count];
38 } value_ = { .value = value };
39
40 for (u32 i = 0; i < count_2; i++)
41 std::swap(value_.data[i], value_.data[count - 1 - i]);
42
43 return value_.value;
44}
45
46#ifdef __ghs__
47#pragma ghs endnowarning
48#endif
49
50template <typename T>
51void FFLiSwapEndianArrayImpl(T* pArray, u32 size)
52{
53 for (u32 i = 0; i < size; i++)
54 pArray[i] = FFLiSwapEndianImpl<T>(pArray[i]);
55}
56
57#endif // FFLI_SWAP_ENDIAN_H_
NN_STATIC_ASSERT(sizeof(FFLiAllocator)==4)
FFLiSwapEndianType
Definition FFLiSwapEndian.h:9
@ FFLI_SWAP_ENDIAN_TYPE_U8
Definition FFLiSwapEndian.h:10
@ FFLI_SWAP_ENDIAN_TYPE_U32
Definition FFLiSwapEndian.h:12
@ FFLI_SWAP_ENDIAN_TYPE_U16
Definition FFLiSwapEndian.h:11
u32 FFLiSwapEndianGroup(void *ptr, const FFLiSwapEndianDesc *pDesc, u32 num)
Definition FFLiSwapEndian.cpp:21
void FFLiSwapEndianArrayImpl(T *pArray, u32 size)
Definition FFLiSwapEndian.h:51
T FFLiSwapEndianImpl(T value)
Definition FFLiSwapEndian.h:29
Definition FFLiSwapEndian.h:16
FFLiSwapEndianType type
Definition FFLiSwapEndian.h:17
u32 size
Definition FFLiSwapEndian.h:18