~ubuntu-branches/ubuntu/raring/qtwebkit-source/raring-proposed

« back to all changes in this revision

Viewing changes to Source/JavaScriptCore/icu/unicode/umachine.h

  • Committer: Package Import Robot
  • Author(s): Jonathan Riddell
  • Date: 2013-02-18 14:24:18 UTC
  • Revision ID: package-import@ubuntu.com-20130218142418-eon0jmjg3nj438uy
Tags: upstream-2.3
ImportĀ upstreamĀ versionĀ 2.3

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
******************************************************************************
 
3
*
 
4
*   Copyright (C) 1999-2010, International Business Machines
 
5
*   Corporation and others.  All Rights Reserved.
 
6
*
 
7
******************************************************************************
 
8
*   file name:  umachine.h
 
9
*   encoding:   US-ASCII
 
10
*   tab size:   8 (not used)
 
11
*   indentation:4
 
12
*
 
13
*   created on: 1999sep13
 
14
*   created by: Markus W. Scherer
 
15
*
 
16
*   This file defines basic types and constants for utf.h to be
 
17
*   platform-independent. umachine.h and utf.h are included into
 
18
*   utypes.h to provide all the general definitions for ICU.
 
19
*   All of these definitions used to be in utypes.h before
 
20
*   the UTF-handling macros made this unmaintainable.
 
21
*/
 
22
 
 
23
#ifndef __UMACHINE_H__
 
24
#define __UMACHINE_H__
 
25
 
 
26
 
 
27
/**
 
28
 * \file
 
29
 * \brief Basic types and constants for UTF
 
30
 *
 
31
 * <h2> Basic types and constants for UTF </h2>
 
32
 *   This file defines basic types and constants for utf.h to be
 
33
 *   platform-independent. umachine.h and utf.h are included into
 
34
 *   utypes.h to provide all the general definitions for ICU.
 
35
 *   All of these definitions used to be in utypes.h before
 
36
 *   the UTF-handling macros made this unmaintainable.
 
37
 *
 
38
 */
 
39
/*==========================================================================*/
 
40
/* Include platform-dependent definitions                                   */
 
41
/* which are contained in the platform-specific file platform.h             */
 
42
/*==========================================================================*/
 
43
 
 
44
#if defined(U_PALMOS)
 
45
#   include "unicode/ppalmos.h"
 
46
#elif !defined(__MINGW32__) && (defined(WIN32) || defined(_WIN32) || defined(WIN64) || defined(_WIN64))
 
47
#ifdef CYGWINMSVC
 
48
#   include "unicode/platform.h"
 
49
#endif
 
50
#   include "unicode/pwin32.h"
 
51
#else
 
52
#   include "unicode/ptypes.h" /* platform.h is included in ptypes.h */
 
53
#endif
 
54
 
 
55
/*
 
56
 * ANSI C headers:
 
57
 * stddef.h defines wchar_t
 
58
 */
 
59
#include <stddef.h>
 
60
 
 
61
/*==========================================================================*/
 
62
/* XP_CPLUSPLUS is a cross-platform symbol which should be defined when     */
 
63
/* using C++.  It should not be defined when compiling under C.             */
 
64
/*==========================================================================*/
 
65
 
 
66
#ifdef __cplusplus
 
67
#   ifndef XP_CPLUSPLUS
 
68
#       define XP_CPLUSPLUS
 
69
#   endif
 
70
#else
 
71
#   undef XP_CPLUSPLUS
 
72
#endif
 
73
 
 
74
/*==========================================================================*/
 
75
/* For C wrappers, we use the symbol U_STABLE.                                */
 
76
/* This works properly if the includer is C or C++.                         */
 
77
/* Functions are declared   U_STABLE return-type U_EXPORT2 function-name()... */
 
78
/*==========================================================================*/
 
79
 
 
80
/**
 
81
 * \def U_CFUNC
 
82
 * This is used in a declaration of a library private ICU C function.
 
83
 * @stable ICU 2.4
 
84
 */
 
85
 
 
86
/**
 
87
 * \def U_CDECL_BEGIN
 
88
 * This is used to begin a declaration of a library private ICU C API.
 
89
 * @stable ICU 2.4
 
90
 */
 
91
 
 
92
/**
 
93
 * \def U_CDECL_END
 
94
 * This is used to end a declaration of a library private ICU C API
 
95
 * @stable ICU 2.4
 
96
 */
 
97
 
 
98
#ifdef XP_CPLUSPLUS
 
99
#   define U_CFUNC extern "C"
 
100
#   define U_CDECL_BEGIN extern "C" {
 
101
#   define U_CDECL_END   }
 
102
#else
 
103
#   define U_CFUNC extern
 
104
#   define U_CDECL_BEGIN
 
105
#   define U_CDECL_END
 
106
#endif
 
107
 
 
108
/**
 
109
 * \def U_ATTRIBUTE_DEPRECATED
 
110
 *  This is used for GCC specific attributes
 
111
 * @internal
 
112
 */
 
113
#if defined(__GNUC__) && (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 2))
 
114
#    define U_ATTRIBUTE_DEPRECATED __attribute__ ((deprecated))
 
115
/**
 
116
 * \def U_ATTRIBUTE_DEPRECATED
 
117
 * This is used for Visual C++ specific attributes 
 
118
 * @internal
 
119
 */
 
120
#elif defined(U_WINDOWS) && defined(_MSC_VER) && (_MSC_VER >= 1400)
 
121
#    define U_ATTRIBUTE_DEPRECATED __declspec(deprecated)
 
122
#else
 
123
#    define U_ATTRIBUTE_DEPRECATED
 
124
#endif
 
125
/** This is used to declare a function as a public ICU C API @stable ICU 2.0*/
 
126
#define U_CAPI U_CFUNC U_EXPORT
 
127
/** This is used to declare a function as a stable public ICU C API*/
 
128
#define U_STABLE U_CAPI
 
129
/** This is used to declare a function as a draft public ICU C API  */
 
130
#define U_DRAFT  U_CAPI
 
131
/** This is used to declare a function as a deprecated public ICU C API  */
 
132
#define U_DEPRECATED U_CAPI U_ATTRIBUTE_DEPRECATED
 
133
/** This is used to declare a function as an obsolete public ICU C API  */
 
134
#define U_OBSOLETE U_CAPI
 
135
/** This is used to declare a function as an internal ICU C API  */
 
136
#define U_INTERNAL U_CAPI
 
137
 
 
138
/*==========================================================================*/
 
139
/* limits for int32_t etc., like in POSIX inttypes.h                        */
 
140
/*==========================================================================*/
 
141
 
 
142
#ifndef INT8_MIN
 
143
/** The smallest value an 8 bit signed integer can hold @stable ICU 2.0 */
 
144
#   define INT8_MIN        ((int8_t)(-128))
 
145
#endif
 
146
#ifndef INT16_MIN
 
147
/** The smallest value a 16 bit signed integer can hold @stable ICU 2.0 */
 
148
#   define INT16_MIN       ((int16_t)(-32767-1))
 
149
#endif
 
150
#ifndef INT32_MIN
 
151
/** The smallest value a 32 bit signed integer can hold @stable ICU 2.0 */
 
152
#   define INT32_MIN       ((int32_t)(-2147483647-1))
 
153
#endif
 
154
 
 
155
#ifndef INT8_MAX
 
156
/** The largest value an 8 bit signed integer can hold @stable ICU 2.0 */
 
157
#   define INT8_MAX        ((int8_t)(127))
 
158
#endif
 
159
#ifndef INT16_MAX
 
160
/** The largest value a 16 bit signed integer can hold @stable ICU 2.0 */
 
161
#   define INT16_MAX       ((int16_t)(32767))
 
162
#endif
 
163
#ifndef INT32_MAX
 
164
/** The largest value a 32 bit signed integer can hold @stable ICU 2.0 */
 
165
#   define INT32_MAX       ((int32_t)(2147483647))
 
166
#endif
 
167
 
 
168
#ifndef UINT8_MAX
 
169
/** The largest value an 8 bit unsigned integer can hold @stable ICU 2.0 */
 
170
#   define UINT8_MAX       ((uint8_t)(255U))
 
171
#endif
 
172
#ifndef UINT16_MAX
 
173
/** The largest value a 16 bit unsigned integer can hold @stable ICU 2.0 */
 
174
#   define UINT16_MAX      ((uint16_t)(65535U))
 
175
#endif
 
176
#ifndef UINT32_MAX
 
177
/** The largest value a 32 bit unsigned integer can hold @stable ICU 2.0 */
 
178
#   define UINT32_MAX      ((uint32_t)(4294967295U))
 
179
#endif
 
180
 
 
181
#if defined(U_INT64_T_UNAVAILABLE)
 
182
# error int64_t is required for decimal format and rule-based number format.
 
183
#else
 
184
# ifndef INT64_C
 
185
/**
 
186
 * Provides a platform independent way to specify a signed 64-bit integer constant.
 
187
 * note: may be wrong for some 64 bit platforms - ensure your compiler provides INT64_C
 
188
 * @stable ICU 2.8
 
189
 */
 
190
#   define INT64_C(c) c ## LL
 
191
# endif
 
192
# ifndef UINT64_C
 
193
/**
 
194
 * Provides a platform independent way to specify an unsigned 64-bit integer constant.
 
195
 * note: may be wrong for some 64 bit platforms - ensure your compiler provides UINT64_C
 
196
 * @stable ICU 2.8
 
197
 */
 
198
#   define UINT64_C(c) c ## ULL
 
199
# endif
 
200
# ifndef U_INT64_MIN
 
201
/** The smallest value a 64 bit signed integer can hold @stable ICU 2.8 */
 
202
#     define U_INT64_MIN       ((int64_t)(INT64_C(-9223372036854775807)-1))
 
203
# endif
 
204
# ifndef U_INT64_MAX
 
205
/** The largest value a 64 bit signed integer can hold @stable ICU 2.8 */
 
206
#     define U_INT64_MAX       ((int64_t)(INT64_C(9223372036854775807)))
 
207
# endif
 
208
# ifndef U_UINT64_MAX
 
209
/** The largest value a 64 bit unsigned integer can hold @stable ICU 2.8 */
 
210
#     define U_UINT64_MAX      ((uint64_t)(UINT64_C(18446744073709551615)))
 
211
# endif
 
212
#endif
 
213
 
 
214
/*==========================================================================*/
 
215
/* Boolean data type                                                        */
 
216
/*==========================================================================*/
 
217
 
 
218
/** The ICU boolean type @stable ICU 2.0 */
 
219
typedef int8_t UBool;
 
220
 
 
221
#ifndef TRUE
 
222
/** The TRUE value of a UBool @stable ICU 2.0 */
 
223
#   define TRUE  1
 
224
#endif
 
225
#ifndef FALSE
 
226
/** The FALSE value of a UBool @stable ICU 2.0 */
 
227
#   define FALSE 0
 
228
#endif
 
229
 
 
230
 
 
231
/*==========================================================================*/
 
232
/* Unicode data types                                                       */
 
233
/*==========================================================================*/
 
234
 
 
235
/* wchar_t-related definitions -------------------------------------------- */
 
236
 
 
237
/**
 
238
 * \def U_HAVE_WCHAR_H
 
239
 * Indicates whether <wchar.h> is available (1) or not (0). Set to 1 by default.
 
240
 *
 
241
 * @stable ICU 2.0
 
242
 */
 
243
#ifndef U_HAVE_WCHAR_H
 
244
#   define U_HAVE_WCHAR_H 1
 
245
#endif
 
246
 
 
247
/**
 
248
 * \def U_SIZEOF_WCHAR_T
 
249
 * U_SIZEOF_WCHAR_T==sizeof(wchar_t) (0 means it is not defined or autoconf could not set it)
 
250
 *
 
251
 * @stable ICU 2.0
 
252
 */
 
253
#if U_SIZEOF_WCHAR_T==0
 
254
#   undef U_SIZEOF_WCHAR_T
 
255
#   define U_SIZEOF_WCHAR_T 4
 
256
#endif
 
257
 
 
258
/*
 
259
 * \def U_WCHAR_IS_UTF16
 
260
 * Defined if wchar_t uses UTF-16.
 
261
 *
 
262
 * @stable ICU 2.0
 
263
 */
 
264
/*
 
265
 * \def U_WCHAR_IS_UTF32
 
266
 * Defined if wchar_t uses UTF-32.
 
267
 *
 
268
 * @stable ICU 2.0
 
269
 */
 
270
#if !defined(U_WCHAR_IS_UTF16) && !defined(U_WCHAR_IS_UTF32)
 
271
#   ifdef __STDC_ISO_10646__
 
272
#       if (U_SIZEOF_WCHAR_T==2)
 
273
#           define U_WCHAR_IS_UTF16
 
274
#       elif (U_SIZEOF_WCHAR_T==4)
 
275
#           define  U_WCHAR_IS_UTF32
 
276
#       endif
 
277
#   elif defined __UCS2__
 
278
#       if (__OS390__ || __OS400__) && (U_SIZEOF_WCHAR_T==2)
 
279
#           define U_WCHAR_IS_UTF16
 
280
#       endif
 
281
#   elif defined __UCS4__
 
282
#       if (U_SIZEOF_WCHAR_T==4)
 
283
#           define U_WCHAR_IS_UTF32
 
284
#       endif
 
285
#   elif defined(U_WINDOWS)
 
286
#       define U_WCHAR_IS_UTF16
 
287
#   endif
 
288
#endif
 
289
 
 
290
/* UChar and UChar32 definitions -------------------------------------------- */
 
291
 
 
292
/** Number of bytes in a UChar. @stable ICU 2.0 */
 
293
#define U_SIZEOF_UCHAR 2
 
294
 
 
295
/**
 
296
 * \var UChar
 
297
 * Define UChar to be wchar_t if that is 16 bits wide; always assumed to be unsigned.
 
298
 * If wchar_t is not 16 bits wide, then define UChar to be uint16_t or char16_t because GCC >=4.4
 
299
 * can handle UTF16 string literals.
 
300
 * This makes the definition of UChar platform-dependent
 
301
 * but allows direct string type compatibility with platforms with
 
302
 * 16-bit wchar_t types.
 
303
 *
 
304
 * @draft ICU 4.4
 
305
 */
 
306
 
 
307
/* Define UChar to be compatible with wchar_t if possible. */
 
308
#if U_SIZEOF_WCHAR_T==2
 
309
    typedef wchar_t UChar;
 
310
#elif U_GNUC_UTF16_STRING
 
311
#if defined _GCC_
 
312
    typedef __CHAR16_TYPE__ char16_t;
 
313
#endif
 
314
    typedef char16_t UChar;
 
315
#else
 
316
    typedef uint16_t UChar;
 
317
#endif
 
318
 
 
319
/**
 
320
 * Define UChar32 as a type for single Unicode code points.
 
321
 * UChar32 is a signed 32-bit integer (same as int32_t).
 
322
 *
 
323
 * The Unicode code point range is 0..0x10ffff.
 
324
 * All other values (negative or >=0x110000) are illegal as Unicode code points.
 
325
 * They may be used as sentinel values to indicate "done", "error"
 
326
 * or similar non-code point conditions.
 
327
 *
 
328
 * Before ICU 2.4 (Jitterbug 2146), UChar32 was defined
 
329
 * to be wchar_t if that is 32 bits wide (wchar_t may be signed or unsigned)
 
330
 * or else to be uint32_t.
 
331
 * That is, the definition of UChar32 was platform-dependent.
 
332
 *
 
333
 * @see U_SENTINEL
 
334
 * @stable ICU 2.4
 
335
 */
 
336
typedef int32_t UChar32;
 
337
 
 
338
/*==========================================================================*/
 
339
/* U_INLINE and U_ALIGN_CODE   Set default values if these are not already  */
 
340
/*                             defined.  Definitions normally are in        */
 
341
/*                             platform.h or the corresponding file for     */
 
342
/*                             the OS in use.                               */
 
343
/*==========================================================================*/
 
344
 
 
345
#ifndef U_HIDE_INTERNAL_API
 
346
 
 
347
/**
 
348
 * \def U_ALIGN_CODE
 
349
 * This is used to align code fragments to a specific byte boundary.
 
350
 * This is useful for getting consistent performance test results.
 
351
 * @internal
 
352
 */
 
353
#ifndef U_ALIGN_CODE
 
354
#   define U_ALIGN_CODE(n)
 
355
#endif
 
356
 
 
357
#endif /* U_HIDE_INTERNAL_API */
 
358
 
 
359
/**
 
360
 * \def U_INLINE
 
361
 * This is used to request inlining of a function, on platforms and languages which support it.
 
362
 */
 
363
 
 
364
#ifndef U_INLINE
 
365
#   ifdef XP_CPLUSPLUS
 
366
#       define U_INLINE inline
 
367
#   else
 
368
#       define U_INLINE
 
369
#   endif
 
370
#endif
 
371
 
 
372
#include "unicode/urename.h"
 
373
 
 
374
#endif