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