]>
Commit | Line | Data |
---|---|---|
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 |