fdo#74697 Add Bluez 5 support for impress remote.
[LibreOffice.git] / include / osl / endian.h
blob82ec1eaca7b12b299711759fcd794d27f03840a7
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
20 #ifndef _OSL_ENDIAN_H_
21 #define _OSL_ENDIAN_H_
23 #include <sal/types.h>
25 #ifdef __cplusplus
26 extern "C" {
27 #endif
29 /** Determine the platform byte order as _BIG_ENDIAN, _LITTLE_ENDIAN, ...
31 #ifdef _WIN32
32 # if defined(_M_IX86)
33 # define _LITTLE_ENDIAN
34 # elif defined(_M_AMD64)
35 # define _LITTLE_ENDIAN
36 # elif defined(_M_MRX000)
37 # define _LITTLE_ENDIAN
38 # elif defined(_M_ALPHA)
39 # define _LITTLE_ENDIAN
40 # elif defined(_M_PPC)
41 # define _LITTLE_ENDIAN
42 # endif
43 #endif
45 #ifdef LINUX
46 # include <endian.h>
47 # if __BYTE_ORDER == __LITTLE_ENDIAN
48 # ifndef _LITTLE_ENDIAN
49 # define _LITTLE_ENDIAN
50 # endif
51 # elif __BYTE_ORDER == __BIG_ENDIAN
52 # ifndef _BIG_ENDIAN
53 # define _BIG_ENDIAN
54 # endif
55 # endif
56 #endif
58 #ifdef ANDROID
59 # include <endian.h>
60 # if __BYTE_ORDER == __LITTLE_ENDIAN
61 # ifndef _LITTLE_ENDIAN
62 # define _LITTLE_ENDIAN
63 # endif
64 # elif __BYTE_ORDER == __BIG_ENDIAN
65 # ifndef _BIG_ENDIAN
66 # define _BIG_ENDIAN
67 # endif
68 # endif
69 #endif
71 #ifdef NETBSD
72 # include <machine/endian.h>
73 # if BYTE_ORDER == LITTLE_ENDIAN
74 # undef _BIG_ENDIAN
75 # elif BYTE_ORDER == BIG_ENDIAN
76 # undef _LITTLE_ENDIAN
77 # endif
78 #endif
80 #ifdef FREEBSD
81 # include <sys/param.h>
82 # include <machine/endian.h>
83 #if __FreeBSD_version < 500000
84 # if BYTE_ORDER == LITTLE_ENDIAN
85 # define _LITTLE_ENDIAN
86 # elif BYTE_ORDER == BIG_ENDIAN
87 # define _BIG_ENDIAN
88 # endif
89 #endif
90 #endif
92 #ifdef AIX
93 # include <sys/machine.h>
94 # if BYTE_ORDER == LITTLE_ENDIAN
95 # ifndef _LITTLE_ENDIAN
96 # define _LITTLE_ENDIAN
97 # endif
98 # elif BYTE_ORDER == BIG_ENDIAN
99 # ifndef _BIG_ENDIAN
100 # define _BIG_ENDIAN
101 # endif
102 # endif
103 #endif
105 #ifdef SOLARIS
106 # include <sys/isa_defs.h>
107 #endif
109 #ifdef MACOSX
110 # include <machine/endian.h>
111 # if BYTE_ORDER == LITTLE_ENDIAN
112 # ifndef _LITTLE_ENDIAN
113 # define _LITTLE_ENDIAN
114 # endif
115 # elif BYTE_ORDER == BIG_ENDIAN
116 # ifndef _BIG_ENDIAN
117 # define _BIG_ENDIAN
118 # endif
119 # endif
120 #endif
122 #ifdef IOS
123 # include <machine/endian.h>
124 # if BYTE_ORDER == LITTLE_ENDIAN
125 # ifndef _LITTLE_ENDIAN
126 # define _LITTLE_ENDIAN
127 # endif
128 # elif BYTE_ORDER == BIG_ENDIAN
129 # ifndef _BIG_ENDIAN
130 # define _BIG_ENDIAN
131 # endif
132 # endif
133 #endif
135 /** Check supported platform.
137 #if !defined(_WIN32) && \
138 !defined(LINUX) && !defined(NETBSD) && \
139 !defined(AIX) && !defined(OPENBSD) && \
140 !defined(SOLARIS) && !defined(MACOSX) && !defined(FREEBSD) && \
141 !defined(DRAGONFLY) && \
142 !defined(IOS) && !defined(ANDROID)
143 # error "Target platform not specified !"
144 #endif
147 /** Define the determined byte order as OSL_BIGENDIAN or OSL_LITENDIAN.
149 #if defined _LITTLE_ENDIAN
150 # define OSL_LITENDIAN
151 #elif defined _BIG_ENDIAN
152 # define OSL_BIGENDIAN
153 #else
154 # error undetermined endianess
155 #endif
158 /** Define macros for byte order manipulation.
160 #ifndef OSL_MAKEBYTE
161 # define OSL_MAKEBYTE(nl, nh) ((sal_uInt8)(((nl) & 0x0F) | (((nh) & 0x0F) << 4)))
162 #endif
163 #ifndef OSL_LONIBBLE
164 # define OSL_LONIBBLE(b) ((sal_uInt8)((b) & 0x0F))
165 #endif
166 #ifndef OSL_HINIBBLE
167 # define OSL_HINIBBLE(b) ((sal_uInt8)(((b) >> 4) & 0x0F))
168 #endif
170 #ifndef OSL_MAKEWORD
171 # define OSL_MAKEWORD(bl, bh) ((sal_uInt16)((bl) & 0xFF) | (((sal_uInt16)(bh) & 0xFF) << 8))
172 #endif
173 #ifndef OSL_LOBYTE
174 # define OSL_LOBYTE(w) ((sal_uInt8)((sal_uInt16)(w) & 0xFF))
175 #endif
176 #ifndef OSL_HIBYTE
177 # define OSL_HIBYTE(w) ((sal_uInt8)(((sal_uInt16)(w) >> 8) & 0xFF))
178 #endif
180 #ifndef OSL_MAKEDWORD
181 # define OSL_MAKEDWORD(wl, wh) ((sal_uInt32)((wl) & 0xFFFF) | (((sal_uInt32)(wh) & 0xFFFF) << 16))
182 #endif
183 #ifndef OSL_LOWORD
184 # define OSL_LOWORD(d) ((sal_uInt16)((sal_uInt32)(d) & 0xFFFF))
185 #endif
186 #ifndef OSL_HIWORD
187 # define OSL_HIWORD(d) ((sal_uInt16)(((sal_uInt32)(d) >> 16) & 0xFFFF))
188 #endif
191 /** Define macros for swapping between host and network byte order.
193 #ifdef OSL_BIGENDIAN
194 #ifndef OSL_NETWORD
195 # define OSL_NETWORD(w) (sal_uInt16)(w)
196 #endif
197 #ifndef OSL_NETDWORD
198 # define OSL_NETDWORD(d) (sal_uInt32)(d)
199 #endif
200 #else /* OSL_LITENDIAN */
201 #ifndef OSL_NETWORD
202 # define OSL_NETWORD(w) OSL_MAKEWORD(OSL_HIBYTE(w),OSL_LOBYTE(w))
203 #endif
204 #ifndef OSL_NETDWORD
205 # define OSL_NETDWORD(d) OSL_MAKEDWORD(OSL_NETWORD(OSL_HIWORD(d)),OSL_NETWORD(OSL_LOWORD(d)))
206 #endif
207 #endif /* OSL_BIGENDIAN */
210 /** Define macros for swapping between byte orders.
212 #ifndef OSL_SWAPWORD
213 # define OSL_SWAPWORD(w) OSL_MAKEWORD(OSL_HIBYTE(w),OSL_LOBYTE(w))
214 #endif
215 #ifndef OSL_SWAPDWORD
216 # define OSL_SWAPDWORD(d) OSL_MAKEDWORD(OSL_SWAPWORD(OSL_HIWORD(d)),OSL_SWAPWORD(OSL_LOWORD(d)))
217 #endif
220 #ifdef __cplusplus
222 #endif
224 #endif /*_OSL_ENDIAN_H_ */
226 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */