48e2f01c |
1 | /* |
2 | * Copyright (C) 2013 nu774 |
3 | * For conditions of distribution and use, see copyright notice in COPYING |
4 | */ |
5 | #ifndef M4AF_ENDIAN_H |
6 | #define M4AF_ENDIAN_H |
7 | |
8 | #if HAVE_CONFIG_H |
9 | # include "config.h" |
10 | #endif |
11 | #if HAVE_STDINT_H |
12 | # include <stdint.h> |
13 | #endif |
14 | |
15 | #if HAVE_ENDIAN_H |
16 | # include <endian.h> |
17 | # define m4af_htob16(x) htobe16(x) |
18 | # define m4af_htob32(x) htobe32(x) |
19 | # define m4af_htob64(x) htobe64(x) |
20 | # define m4af_btoh16(x) be16toh(x) |
21 | # define m4af_btoh32(x) be32toh(x) |
22 | # define m4af_btoh64(x) be64toh(x) |
23 | # define m4af_htol16(x) htole16(x) |
24 | # define m4af_htol32(x) htole32(x) |
25 | # define m4af_htol64(x) htole64(x) |
26 | # define m4af_ltoh16(x) le16toh(x) |
27 | # define m4af_ltoh32(x) le32toh(x) |
28 | # define m4af_ltoh64(x) le64toh(x) |
29 | #elif WORDS_BIGENDIAN |
30 | # define m4af_htob16(x) (x) |
31 | # define m4af_htob32(x) (x) |
32 | # define m4af_htob64(x) (x) |
33 | # define m4af_btoh16(x) (x) |
34 | # define m4af_btoh32(x) (x) |
35 | # define m4af_btoh64(x) (x) |
36 | # define m4af_ltoh16(x) m4af_swap16(x) |
37 | # define m4af_ltoh32(x) m4af_swap32(x) |
38 | # define m4af_ltoh64(x) m4af_swap64(x) |
39 | # define m4af_htol16(x) m4af_swap16(x) |
40 | # define m4af_htol32(x) m4af_swap32(x) |
41 | # define m4af_htol64(x) m4af_swap64(x) |
42 | #else |
43 | # define m4af_htob16(x) m4af_swap16(x) |
44 | # define m4af_htob32(x) m4af_swap32(x) |
45 | # define m4af_htob64(x) m4af_swap64(x) |
46 | # define m4af_btoh16(x) m4af_swap16(x) |
47 | # define m4af_btoh32(x) m4af_swap32(x) |
48 | # define m4af_btoh64(x) m4af_swap64(x) |
49 | # define m4af_ltoh16(x) (x) |
50 | # define m4af_ltoh32(x) (x) |
51 | # define m4af_ltoh64(x) (x) |
52 | # define m4af_htol16(x) (x) |
53 | # define m4af_htol32(x) (x) |
54 | # define m4af_htol64(x) (x) |
55 | #endif |
56 | |
57 | #if _MSC_VER >= 1400 |
58 | # include <stdlib.h> |
59 | # define m4af_swap16(x) _byteswap_ushort(x) |
60 | # define m4af_swap32(x) _byteswap_ulong(x) |
61 | # define m4af_swap64(x) _byteswap_uint64(x) |
62 | #elif HAVE_BYTESWAP_H |
63 | # include <byteswap.h> |
64 | # define m4af_swap16(x) bswap_16(x) |
65 | # define m4af_swap32(x) bswap_32(x) |
66 | # define m4af_swap64(x) bswap_64(x) |
67 | #else |
68 | static inline uint16_t m4af_swap16(uint16_t x) |
69 | { |
70 | return (x >> 8) | (x << 8); |
71 | } |
72 | |
73 | static inline uint32_t m4af_swap32(uint32_t x) |
74 | { |
75 | return (m4af_htob16(x) << 16) | m4af_htob16(x >> 16); |
76 | } |
77 | |
78 | static inline uint64_t m4af_swap64(uint64_t x) |
79 | { |
80 | return ((uint64_t)m4af_htob32(x) << 32) | m4af_htob32(x >> 32); |
81 | } |
82 | #endif |
83 | |
84 | #endif /* M4AF_ENDIAN_H */ |
85 | |