1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*
2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru**********************************************************************
350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho*   Copyright (C) 1996-2010, International Business Machines
4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*   Corporation and others.  All Rights Reserved.
5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru**********************************************************************
6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*
7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*  FILE NAME : UTYPES.H (formerly ptypes.h)
8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*
9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*   Date        Name        Description
10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*   12/11/96    helena      Creation.
11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*   02/27/97    aliu        Added typedefs for UClassID, int8, int16, int32,
12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*                           uint8, uint16, and uint32.
13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*   04/01/97    aliu        Added XP_CPLUSPLUS and modified to work under C as
14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*                            well as C++.
15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*                           Modified to use memcpy() for uprv_arrayCopy() fns.
16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*   04/14/97    aliu        Added TPlatformUtilities.
17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*   05/07/97    aliu        Added import/export specifiers (replacing the old
18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*                           broken EXT_CLASS).  Added version number for our
19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*                           code.  Cleaned up header.
20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*    6/20/97    helena      Java class name change.
21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*   08/11/98    stephen     UErrorCode changed from typedef to enum
22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*   08/12/98    erm         Changed T_ANALYTIC_PACKAGE_VERSION to 3
23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*   08/14/98    stephen     Added uprv_arrayCopy() for int8_t, int16_t, int32_t
24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*   12/09/98    jfitz       Added BUFFER_OVERFLOW_ERROR (bug 1100066)
25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*   04/20/99    stephen     Cleaned up & reworked for autoconf.
26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*                           Renamed to utypes.h.
27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*   05/05/99    stephen     Changed to use <inttypes.h>
28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*   12/07/99    helena      Moved copyright notice string from ucnv_bld.h here.
29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*******************************************************************************
30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/
31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifndef UTYPES_H
33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define UTYPES_H
34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/umachine.h"
37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utf.h"
38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/uversion.h"
39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/uconfig.h"
40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
4150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/*!
4250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * \file
4350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * \brief Basic definitions for ICU, for both C and C++ APIs
4450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho *
4550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * This file defines basic types, constants, and enumerations directly or
4650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * indirectly by including other header files, especially utf.h for the
4750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * basic character and string definitions and umachine.h for consistent
4850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * integer and other types.
4950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho */
5050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
5150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
5250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/**
5350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * \def U_SHOW_CPLUSPLUS_API
5450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * @internal
5550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho */
5650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#ifdef XP_CPLUSPLUS
5750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#   ifndef U_SHOW_CPLUSPLUS_API
5850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#       define U_SHOW_CPLUSPLUS_API 1
5950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#   endif
6050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#else
6150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#   undef U_SHOW_CPLUSPLUS_API
6250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#   define U_SHOW_CPLUSPLUS_API 0
6350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif
6450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
6550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/** @{ API visibility control */
6650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
67b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru/**
68b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * \def U_HIDE_DRAFT_API
69b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * Define this to 1 to request that draft API be "hidden"
70b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru */
71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !U_DEFAULT_SHOW_DRAFT && !defined(U_SHOW_DRAFT_API)
72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_HIDE_DRAFT_API 1
73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif
7450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if !U_DEFAULT_SHOW_DRAFT && !defined(U_SHOW_INTERNAL_API)
7550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#define U_HIDE_INTERNAL_API 1
7650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif
77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifdef U_HIDE_DRAFT_API
79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/udraft.h"
80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif
81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifdef U_HIDE_DEPRECATED_API
83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/udeprctd.h"
84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif
85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifdef U_HIDE_DEPRECATED_API
87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/uobslete.h"
88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif
89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifdef U_HIDE_INTERNAL_API
91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/uintrnal.h"
92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif
93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifdef U_HIDE_SYSTEM_API
95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/usystem.h"
96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif
97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
9850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/** @} */
9950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*===========================================================================*/
102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* char Character set family                                                 */
103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*===========================================================================*/
104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * U_CHARSET_FAMILY is equal to this value when the platform is an ASCII based platform.
107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0
108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_ASCII_FAMILY 0
110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * U_CHARSET_FAMILY is equal to this value when the platform is an EBCDIC based platform.
113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0
114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_EBCDIC_FAMILY 1
116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \def U_CHARSET_FAMILY
119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <p>These definitions allow to specify the encoding of text
121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * in the char data type as defined by the platform and the compiler.
122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * It is enough to determine the code point values of "invariant characters",
123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * which are the ones shared by all encodings that are in use
124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * on a given platform.</p>
125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <p>Those "invariant characters" should be all the uppercase and lowercase
127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * latin letters, the digits, the space, and "basic punctuation".
128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Also, '\\n', '\\r', '\\t' should be available.</p>
129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <p>The list of "invariant characters" is:<br>
131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \code
132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *    A-Z  a-z  0-9  SPACE  "  %  &amp;  '  (  )  *  +  ,  -  .  /  :  ;  <  =  >  ?  _
133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \endcode
134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <br>
135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * (52 letters + 10 numbers + 20 punc/sym/space = 82 total)</p>
136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <p>This matches the IBM Syntactic Character Set (CS 640).</p>
138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <p>In other words, all the graphic characters in 7-bit ASCII should
140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * be safely accessible except the following:</p>
141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \code
143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *    '\' <backslash>
144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *    '[' <left bracket>
145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *    ']' <right bracket>
146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *    '{' <left brace>
147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *    '}' <right brace>
148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *    '^' <circumflex>
149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *    '~' <tilde>
150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *    '!' <exclamation mark>
151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *    '#' <number sign>
152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *    '|' <vertical line>
153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *    '$' <dollar sign>
154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *    '@' <commercial at>
155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *    '`' <grave accent>
156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \endcode
157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0
158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifndef U_CHARSET_FAMILY
161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#   define U_CHARSET_FAMILY 0
162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif
163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
164b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru/**
165b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * \def U_CHARSET_IS_UTF8
166b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru *
167b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * Hardcode the default charset to UTF-8.
168b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru *
169b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * If this is set to 1, then
170b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * - ICU will assume that all non-invariant char*, StringPiece, std::string etc.
171b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru *   contain UTF-8 text, regardless of what the system API uses
172b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * - some ICU code will use fast functions like u_strFromUTF8()
173b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru *   rather than the more general and more heavy-weight conversion API (ucnv.h)
174b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * - ucnv_getDefaultName() always returns "UTF-8"
175b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * - ucnv_setDefaultName() is disabled and will not change the default charset
176b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * - static builds of ICU are smaller
177b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * - more functionality is available with the UCONFIG_NO_CONVERSION build-time
178b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru *   configuration option (see unicode/uconfig.h)
179b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * - the UCONFIG_NO_CONVERSION build option in uconfig.h is more usable
180b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru *
18127f654740f2a26ad62a5c155af9199af9e69b889claireho * @stable ICU 4.2
182b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * @see UCONFIG_NO_CONVERSION
183b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru */
184b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#ifndef U_CHARSET_IS_UTF8
185b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#   define U_CHARSET_IS_UTF8 0
186b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#endif
187b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*===========================================================================*/
189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* ICUDATA naming scheme                                                     */
190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*===========================================================================*/
191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \def U_ICUDATA_TYPE_LETTER
194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * This is a platform-dependent string containing one letter:
196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * - b for big-endian, ASCII-family platforms
197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * - l for little-endian, ASCII-family platforms
198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * - e for big-endian, EBCDIC-family platforms
199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * This letter is part of the common data file name.
200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0
201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \def U_ICUDATA_TYPE_LITLETTER
205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * The non-string form of U_ICUDATA_TYPE_LETTER
206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0
207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if U_CHARSET_FAMILY
209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#   if U_IS_BIG_ENDIAN
210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   /* EBCDIC - should always be BE */
211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#     define U_ICUDATA_TYPE_LETTER "e"
212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#     define U_ICUDATA_TYPE_LITLETTER e
213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#   else
214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#     error "Don't know what to do with little endian EBCDIC!"
215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#     define U_ICUDATA_TYPE_LETTER "x"
216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#     define U_ICUDATA_TYPE_LITLETTER x
217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#   endif
218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#else
219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#   if U_IS_BIG_ENDIAN
220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      /* Big-endian ASCII */
221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#     define U_ICUDATA_TYPE_LETTER "b"
222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#     define U_ICUDATA_TYPE_LITLETTER b
223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#   else
224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      /* Little-endian ASCII */
225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#     define U_ICUDATA_TYPE_LETTER "l"
226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#     define U_ICUDATA_TYPE_LITLETTER l
227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#   endif
228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif
229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * A single string literal containing the icudata stub name. i.e. 'icudt18e' for
232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * ICU 1.8.x on EBCDIC, etc..
233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0
234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
23550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#define U_ICUDATA_NAME    "icudt" U_ICU_VERSION_SHORT U_ICUDATA_TYPE_LETTER  /**< @internal */
23650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#define U_USRDATA_NAME    "usrdt" U_ICU_VERSION_SHORT U_ICUDATA_TYPE_LETTER  /**< @internal */
23750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#define U_USE_USRDATA     1  /**< @internal */
238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *  U_ICU_ENTRY_POINT is the name of the DLL entry point to the ICU data library.
241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *    Defined as a literal, not a string.
242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *    Tricky Preprocessor use - ## operator replaces macro paramters with the literal string
243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *                              from the corresponding macro invocation, _before_ other macro substitutions.
244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *                              Need a nested \#defines to get the actual version numbers rather than
245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *                              the literal text U_ICU_VERSION_MAJOR_NUM into the name.
246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *                              The net result will be something of the form
247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *                                  \#define U_ICU_ENTRY_POINT icudt19_dat
248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.4
249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_ICUDATA_ENTRY_POINT  U_DEF2_ICUDATA_ENTRY_POINT(U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM)
251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Do not use.
254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal
255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_DEF2_ICUDATA_ENTRY_POINT(major, minor) U_DEF_ICUDATA_ENTRY_POINT(major, minor)
257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Do not use.
259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal
260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
26150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#ifndef U_DEF_ICUDATA_ENTRY_POINT
26250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* affected by symbol renaming. See platform.h */
263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_DEF_ICUDATA_ENTRY_POINT(major, minor) icudt##major##minor##_dat
26450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif
265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \def U_CALLCONV
268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Similar to U_CDECL_BEGIN/U_CDECL_END, this qualifier is necessary
269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * in callback function typedefs to make sure that the calling convention
270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * is compatible.
271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * This is only used for non-ICU-API functions.
273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * When a function is a public ICU API,
274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * you must use the U_CAPI and U_EXPORT2 qualifiers.
275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0
276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
27750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if defined(OS390) && defined(XP_CPLUSPLUS)
278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#    define U_CALLCONV __cdecl
279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#else
280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#    define U_CALLCONV U_EXPORT2
281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif
282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \def NULL
285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Define NULL if necessary, to 0 for C++ and to ((void *)0) for C.
286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0
287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifndef NULL
289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifdef XP_CPLUSPLUS
290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define NULL    0
291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#else
292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define NULL    ((void *)0)
293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif
294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif
295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*===========================================================================*/
297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Calendar/TimeZone data types                                              */
298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*===========================================================================*/
299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Date and Time data type.
302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * This is a primitive data type that holds the date and time
303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * as the number of milliseconds since 1970-jan-01, 00:00 UTC.
304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * UTC leap seconds are ignored.
305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0
306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querutypedef double UDate;
308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** The number of milliseconds per second @stable ICU 2.0 */
310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_MILLIS_PER_SECOND        (1000)
311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** The number of milliseconds per minute @stable ICU 2.0 */
312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_MILLIS_PER_MINUTE       (60000)
313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** The number of milliseconds per hour @stable ICU 2.0 */
314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_MILLIS_PER_HOUR       (3600000)
315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** The number of milliseconds per day @stable ICU 2.0 */
316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_MILLIS_PER_DAY       (86400000)
317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*===========================================================================*/
320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* UClassID-based RTTI */
321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*===========================================================================*/
322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * UClassID is used to identify classes without using RTTI, since RTTI
325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * is not yet supported by all C++ compilers.  Each class hierarchy which needs
326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * to implement polymorphic clone() or operator==() defines two methods,
327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * described in detail below.  UClassID values can be compared using
328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * operator==(). Nothing else should be done with them.
329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \par
331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * getDynamicClassID() is declared in the base class of the hierarchy as
332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * a pure virtual.  Each concrete subclass implements it in the same way:
333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \code
335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *      class Base {
336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *      public:
337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *          virtual UClassID getDynamicClassID() const = 0;
338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *      }
339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *      class Derived {
341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *      public:
342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *          virtual UClassID getDynamicClassID() const
343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *            { return Derived::getStaticClassID(); }
344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *      }
345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \endcode
346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Each concrete class implements getStaticClassID() as well, which allows
348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * clients to test for a specific type.
349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \code
351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *      class Derived {
352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *      public:
353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *          static UClassID U_EXPORT2 getStaticClassID();
354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *      private:
355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *          static char fgClassID;
356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *      }
357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *      // In Derived.cpp:
359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *      UClassID Derived::getStaticClassID()
360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *        { return (UClassID)&Derived::fgClassID; }
361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *      char Derived::fgClassID = 0; // Value is irrelevant
362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \endcode
363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0
364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querutypedef void* UClassID;
366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*===========================================================================*/
368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Shared library/DLL import-export API control                              */
369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*===========================================================================*/
370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*
372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Control of symbol import/export.
373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * ICU is separated into three libraries.
374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*
377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \def U_COMBINED_IMPLEMENTATION
378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Set to export library symbols from inside the ICU library
379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * when all of ICU is in a single library.
380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * This can be set as a compiler option while building ICU, and it
381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * needs to be the first one tested to override U_COMMON_API, U_I18N_API, etc.
382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0
383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \def U_DATA_API
387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Set to export library symbols from inside the stubdata library,
388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * and to import them from outside.
389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 3.0
390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \def U_COMMON_API
394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Set to export library symbols from inside the common library,
395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * and to import them from outside.
396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0
397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \def U_I18N_API
401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Set to export library symbols from inside the i18n library,
402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * and to import them from outside.
403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0
404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \def U_LAYOUT_API
408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Set to export library symbols from inside the layout engine library,
409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * and to import them from outside.
410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0
411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \def U_LAYOUTEX_API
415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Set to export library symbols from inside the layout extensions library,
416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * and to import them from outside.
417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.6
418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \def U_IO_API
422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Set to export library symbols from inside the ustdio library,
423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * and to import them from outside.
424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0
425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \def U_TOOLUTIL_API
429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Set to export library symbols from inside the toolutil library,
430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * and to import them from outside.
431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 3.4
432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if defined(U_COMBINED_IMPLEMENTATION)
435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_DATA_API     U_EXPORT
436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_COMMON_API   U_EXPORT
437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_I18N_API     U_EXPORT
438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_LAYOUT_API   U_EXPORT
439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_LAYOUTEX_API U_EXPORT
440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_IO_API       U_EXPORT
441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_TOOLUTIL_API U_EXPORT
442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#elif defined(U_STATIC_IMPLEMENTATION)
443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_DATA_API
444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_COMMON_API
445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_I18N_API
446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_LAYOUT_API
447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_LAYOUTEX_API
448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_IO_API
449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_TOOLUTIL_API
450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#elif defined(U_COMMON_IMPLEMENTATION)
451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_DATA_API     U_IMPORT
452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_COMMON_API   U_EXPORT
453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_I18N_API     U_IMPORT
454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_LAYOUT_API   U_IMPORT
455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_LAYOUTEX_API U_IMPORT
456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_IO_API       U_IMPORT
457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_TOOLUTIL_API U_IMPORT
458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#elif defined(U_I18N_IMPLEMENTATION)
459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_DATA_API     U_IMPORT
460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_COMMON_API   U_IMPORT
461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_I18N_API     U_EXPORT
462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_LAYOUT_API   U_IMPORT
463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_LAYOUTEX_API U_IMPORT
464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_IO_API       U_IMPORT
465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_TOOLUTIL_API U_IMPORT
466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#elif defined(U_LAYOUT_IMPLEMENTATION)
467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_DATA_API     U_IMPORT
468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_COMMON_API   U_IMPORT
469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_I18N_API     U_IMPORT
470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_LAYOUT_API   U_EXPORT
471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_LAYOUTEX_API U_IMPORT
472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_IO_API       U_IMPORT
473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_TOOLUTIL_API U_IMPORT
474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#elif defined(U_LAYOUTEX_IMPLEMENTATION)
475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_DATA_API     U_IMPORT
476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_COMMON_API   U_IMPORT
477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_I18N_API     U_IMPORT
478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_LAYOUT_API   U_IMPORT
479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_LAYOUTEX_API U_EXPORT
480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_IO_API       U_IMPORT
481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_TOOLUTIL_API U_IMPORT
482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#elif defined(U_IO_IMPLEMENTATION)
483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_DATA_API     U_IMPORT
484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_COMMON_API   U_IMPORT
485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_I18N_API     U_IMPORT
486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_LAYOUT_API   U_IMPORT
487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_LAYOUTEX_API U_IMPORT
488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_IO_API       U_EXPORT
489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_TOOLUTIL_API U_IMPORT
490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#elif defined(U_TOOLUTIL_IMPLEMENTATION)
491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_DATA_API     U_IMPORT
492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_COMMON_API   U_IMPORT
493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_I18N_API     U_IMPORT
494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_LAYOUT_API   U_IMPORT
495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_LAYOUTEX_API U_IMPORT
496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_IO_API       U_IMPORT
497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_TOOLUTIL_API U_EXPORT
498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#else
499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_DATA_API     U_IMPORT
500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_COMMON_API   U_IMPORT
501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_I18N_API     U_IMPORT
502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_LAYOUT_API   U_IMPORT
503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_LAYOUTEX_API U_IMPORT
504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_IO_API       U_IMPORT
505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_TOOLUTIL_API U_IMPORT
506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif
507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \def U_STANDARD_CPP_NAMESPACE
510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Control of C++ Namespace
511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0
512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifdef __cplusplus
514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_STANDARD_CPP_NAMESPACE        ::
515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#else
516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_STANDARD_CPP_NAMESPACE
517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif
518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*===========================================================================*/
521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Global delete operator                                                    */
522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*===========================================================================*/
523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*
525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * The ICU4C library must not use the global new and delete operators.
526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * These operators here are defined to enable testing for this.
527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * See Jitterbug 2581 for details of why this is necessary.
528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verification that ICU4C's memory usage is correct, i.e.,
530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * that global new/delete are not used:
531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * a) Check for imports of global new/delete (see uobject.cpp for details)
533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * b) Verify that new is never imported.
534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * c) Verify that delete is only imported from object code for interface/mixin classes.
535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * d) Add global delete and delete[] only for the ICU4C library itself
536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *    and define them in a way that crashes or otherwise easily shows a problem.
537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * The following implements d).
539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * The operator implementations crash; this is intentional and used for library debugging.
540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Note: This is currently only done on Windows because
542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * some Linux/Unix compilers have problems with defining global new/delete.
543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * On Windows, U_WINDOWS is defined, and it is _MSC_VER>=1200 for MSVC 6.0 and higher.
544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if defined(XP_CPLUSPLUS) && defined(U_WINDOWS) && U_DEBUG && U_OVERRIDE_CXX_ALLOCATION && (_MSC_VER>=1200) && !defined(U_STATIC_IMPLEMENTATION) && (defined(U_COMMON_IMPLEMENTATION) || defined(U_I18N_IMPLEMENTATION) || defined(U_IO_IMPLEMENTATION) || defined(U_LAYOUT_IMPLEMENTATION) || defined(U_LAYOUTEX_IMPLEMENTATION))
546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifndef U_HIDE_INTERNAL_API
548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Global operator new, defined only inside ICU4C, must not be used.
550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Crashes intentionally.
551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal
552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline void *
554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruoperator new(size_t /*size*/) {
555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    char *q=NULL;
556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    *q=5; /* break it */
557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    return q;
558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
560c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#ifdef _Ret_bytecap_
561c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru/* This is only needed to suppress a Visual C++ 2008 warning for operator new[]. */
562c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru_Ret_bytecap_(_Size)
563c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#endif
564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Global operator new[], defined only inside ICU4C, must not be used.
566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Crashes intentionally.
567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal
568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline void *
570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruoperator new[](size_t /*size*/) {
571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    char *q=NULL;
572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    *q=5; /* break it */
573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    return q;
574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Global operator delete, defined only inside ICU4C, must not be used.
578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Crashes intentionally.
579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal
580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline void
582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruoperator delete(void * /*p*/) {
583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    char *q=NULL;
584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    *q=5; /* break it */
585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Global operator delete[], defined only inside ICU4C, must not be used.
589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Crashes intentionally.
590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal
591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline void
593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruoperator delete[](void * /*p*/) {
594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    char *q=NULL;
595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    *q=5; /* break it */
596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* U_HIDE_INTERNAL_API */
599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif
600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*===========================================================================*/
602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* UErrorCode */
603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*===========================================================================*/
604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Error code to replace exception handling, so that the code is compatible with all C++ compilers,
607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * and to use the same mechanism for C and C++.
608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \par
610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * ICU functions that take a reference (C++) or a pointer (C) to a UErrorCode
611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * first test if(U_FAILURE(errorCode)) { return immediately; }
612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * so that in a chain of such functions the first one that sets an error code
613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * causes the following ones to not perform any operations.
614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \par
616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Error codes should be tested using U_FAILURE() and U_SUCCESS().
617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0
618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querutypedef enum UErrorCode {
620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* The ordering of U_ERROR_INFO_START Vs U_USING_FALLBACK_WARNING looks weird
621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * and is that way because VC++ debugger displays first encountered constant,
622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * which is not the what the code is used for
623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_USING_FALLBACK_WARNING  = -128,   /**< A resource bundle lookup returned a fallback result (not an error) */
626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_ERROR_WARNING_START     = -128,   /**< Start of information results (semantically successful) */
628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_USING_DEFAULT_WARNING   = -127,   /**< A resource bundle lookup returned a result from the root locale (not an error) */
630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_SAFECLONE_ALLOCATED_WARNING = -126, /**< A SafeClone operation required allocating memory (informational only) */
632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_STATE_OLD_WARNING       = -125,   /**< ICU has to use compatibility layer to construct the service. Expect performance/memory usage degradation. Consider upgrading */
634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_STRING_NOT_TERMINATED_WARNING = -124,/**< An output string could not be NUL-terminated because output length==destCapacity. */
636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_SORT_KEY_TOO_SHORT_WARNING = -123, /**< Number of levels requested in getBound is higher than the number of levels in the sort key */
638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_AMBIGUOUS_ALIAS_WARNING = -122,   /**< This converter alias can go to different converter implementations */
640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_DIFFERENT_UCA_VERSION = -121,     /**< ucol_open encountered a mismatch between UCA version and collator image version, so the collator was constructed from rules. No impact to further function */
64250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
64350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    U_PLUGIN_CHANGED_LEVEL_WARNING = -120, /**< A plugin caused a level change. May not be an error, but later plugins may not load. */
644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_ERROR_WARNING_LIMIT,              /**< This must always be the last warning value to indicate the limit for UErrorCode warnings (last warning code +1) */
646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_ZERO_ERROR              =  0,     /**< No error, no warning. */
649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_ILLEGAL_ARGUMENT_ERROR  =  1,     /**< Start of codes indicating failure */
651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_MISSING_RESOURCE_ERROR  =  2,     /**< The requested resource cannot be found */
652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_INVALID_FORMAT_ERROR    =  3,     /**< Data format is not what is expected */
653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_FILE_ACCESS_ERROR       =  4,     /**< The requested file cannot be found */
654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_INTERNAL_PROGRAM_ERROR  =  5,     /**< Indicates a bug in the library code */
655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_MESSAGE_PARSE_ERROR     =  6,     /**< Unable to parse a message (message format) */
656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_MEMORY_ALLOCATION_ERROR =  7,     /**< Memory allocation error */
657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_INDEX_OUTOFBOUNDS_ERROR =  8,     /**< Trying to access the index that is out of bounds */
658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_PARSE_ERROR             =  9,     /**< Equivalent to Java ParseException */
659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_INVALID_CHAR_FOUND      = 10,     /**< Character conversion: Unmappable input sequence. In other APIs: Invalid character. */
660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_TRUNCATED_CHAR_FOUND    = 11,     /**< Character conversion: Incomplete input sequence. */
661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_ILLEGAL_CHAR_FOUND      = 12,     /**< Character conversion: Illegal input sequence/combination of input units. */
662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_INVALID_TABLE_FORMAT    = 13,     /**< Conversion table file found, but corrupted */
663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_INVALID_TABLE_FILE      = 14,     /**< Conversion table file not found */
664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_BUFFER_OVERFLOW_ERROR   = 15,     /**< A result would not fit in the supplied buffer */
665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_UNSUPPORTED_ERROR       = 16,     /**< Requested operation not supported in current context */
666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_RESOURCE_TYPE_MISMATCH  = 17,     /**< an operation is requested over a resource that does not support it */
667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_ILLEGAL_ESCAPE_SEQUENCE = 18,     /**< ISO-2022 illlegal escape sequence */
668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_UNSUPPORTED_ESCAPE_SEQUENCE = 19, /**< ISO-2022 unsupported escape sequence */
669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_NO_SPACE_AVAILABLE      = 20,     /**< No space available for in-buffer expansion for Arabic shaping */
670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_CE_NOT_FOUND_ERROR      = 21,     /**< Currently used only while setting variable top, but can be used generally */
671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_PRIMARY_TOO_LONG_ERROR  = 22,     /**< User tried to set variable top to a primary that is longer than two bytes */
672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_STATE_TOO_OLD_ERROR     = 23,     /**< ICU cannot construct a service from this state, as it is no longer supported */
673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_TOO_MANY_ALIASES_ERROR  = 24,     /**< There are too many aliases in the path to the requested resource.
674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                             It is very possible that a circular alias definition has occured */
675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_ENUM_OUT_OF_SYNC_ERROR  = 25,     /**< UEnumeration out of sync with underlying collection */
676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_INVARIANT_CONVERSION_ERROR = 26,  /**< Unable to convert a UChar* string to char* with the invariant converter. */
677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_INVALID_STATE_ERROR     = 27,     /**< Requested operation can not be completed with ICU in its current state */
678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_COLLATOR_VERSION_MISMATCH = 28,   /**< Collator version is not compatible with the base version */
679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_USELESS_COLLATOR_ERROR  = 29,     /**< Collator is options only and no base is specified */
680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_NO_WRITE_PERMISSION     = 30,     /**< Attempt to modify read-only or constant data. */
681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_STANDARD_ERROR_LIMIT,             /**< This must always be the last value to indicate the limit for standard errors */
683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * the error code range 0x10000 0x10100 are reserved for Transliterator
685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_BAD_VARIABLE_DEFINITION=0x10000,/**< Missing '$' or duplicate variable name */
687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_PARSE_ERROR_START = 0x10000,    /**< Start of Transliterator errors */
688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_MALFORMED_RULE,                 /**< Elements of a rule are misplaced */
689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_MALFORMED_SET,                  /**< A UnicodeSet pattern is invalid*/
690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_MALFORMED_SYMBOL_REFERENCE,     /**< UNUSED as of ICU 2.4 */
691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_MALFORMED_UNICODE_ESCAPE,       /**< A Unicode escape pattern is invalid*/
692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_MALFORMED_VARIABLE_DEFINITION,  /**< A variable definition is invalid */
693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_MALFORMED_VARIABLE_REFERENCE,   /**< A variable reference is invalid */
694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_MISMATCHED_SEGMENT_DELIMITERS,  /**< UNUSED as of ICU 2.4 */
695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_MISPLACED_ANCHOR_START,         /**< A start anchor appears at an illegal position */
696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_MISPLACED_CURSOR_OFFSET,        /**< A cursor offset occurs at an illegal position */
697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_MISPLACED_QUANTIFIER,           /**< A quantifier appears after a segment close delimiter */
698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_MISSING_OPERATOR,               /**< A rule contains no operator */
699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_MISSING_SEGMENT_CLOSE,          /**< UNUSED as of ICU 2.4 */
700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_MULTIPLE_ANTE_CONTEXTS,         /**< More than one ante context */
701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_MULTIPLE_CURSORS,               /**< More than one cursor */
702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_MULTIPLE_POST_CONTEXTS,         /**< More than one post context */
703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_TRAILING_BACKSLASH,             /**< A dangling backslash */
704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_UNDEFINED_SEGMENT_REFERENCE,    /**< A segment reference does not correspond to a defined segment */
705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_UNDEFINED_VARIABLE,             /**< A variable reference does not correspond to a defined variable */
706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_UNQUOTED_SPECIAL,               /**< A special character was not quoted or escaped */
707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_UNTERMINATED_QUOTE,             /**< A closing single quote is missing */
708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_RULE_MASK_ERROR,                /**< A rule is hidden by an earlier more general rule */
709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_MISPLACED_COMPOUND_FILTER,      /**< A compound filter is in an invalid location */
710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_MULTIPLE_COMPOUND_FILTERS,      /**< More than one compound filter */
711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_INVALID_RBT_SYNTAX,             /**< A "::id" rule was passed to the RuleBasedTransliterator parser */
712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_INVALID_PROPERTY_PATTERN,       /**< UNUSED as of ICU 2.4 */
713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_MALFORMED_PRAGMA,               /**< A 'use' pragma is invlalid */
714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_UNCLOSED_SEGMENT,               /**< A closing ')' is missing */
715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_ILLEGAL_CHAR_IN_SEGMENT,        /**< UNUSED as of ICU 2.4 */
716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_VARIABLE_RANGE_EXHAUSTED,       /**< Too many stand-ins generated for the given variable range */
717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_VARIABLE_RANGE_OVERLAP,         /**< The variable range overlaps characters used in rules */
718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_ILLEGAL_CHARACTER,              /**< A special character is outside its allowed context */
719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_INTERNAL_TRANSLITERATOR_ERROR,  /**< Internal transliterator system error */
720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_INVALID_ID,                     /**< A "::id" rule specifies an unknown transliterator */
721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_INVALID_FUNCTION,               /**< A "&fn()" rule specifies an unknown transliterator */
722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_PARSE_ERROR_LIMIT,              /**< The limit for Transliterator errors */
723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * the error code range 0x10100 0x10200 are reserved for formatting API parsing error
726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_UNEXPECTED_TOKEN=0x10100,       /**< Syntax error in format pattern */
728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_FMT_PARSE_ERROR_START=0x10100,  /**< Start of format library errors */
729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_MULTIPLE_DECIMAL_SEPARATORS,    /**< More than one decimal separator in number pattern */
730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_MULTIPLE_DECIMAL_SEPERATORS = U_MULTIPLE_DECIMAL_SEPARATORS, /**< Typo: kept for backward compatibility. Use U_MULTIPLE_DECIMAL_SEPARATORS */
731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_MULTIPLE_EXPONENTIAL_SYMBOLS,   /**< More than one exponent symbol in number pattern */
732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_MALFORMED_EXPONENTIAL_PATTERN,  /**< Grouping symbol in exponent pattern */
733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_MULTIPLE_PERCENT_SYMBOLS,       /**< More than one percent symbol in number pattern */
734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_MULTIPLE_PERMILL_SYMBOLS,       /**< More than one permill symbol in number pattern */
735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_MULTIPLE_PAD_SPECIFIERS,        /**< More than one pad symbol in number pattern */
736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_PATTERN_SYNTAX_ERROR,           /**< Syntax error in format pattern */
737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_ILLEGAL_PAD_POSITION,           /**< Pad symbol misplaced in number pattern */
738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_UNMATCHED_BRACES,               /**< Braces do not match in message pattern */
739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_UNSUPPORTED_PROPERTY,           /**< UNUSED as of ICU 2.4 */
740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_UNSUPPORTED_ATTRIBUTE,          /**< UNUSED as of ICU 2.4 */
741c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    U_ARGUMENT_TYPE_MISMATCH,         /**< Argument name and argument index mismatch in MessageFormat functions */
742c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    U_DUPLICATE_KEYWORD,              /**< Duplicate keyword in PluralFormat */
74350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    U_UNDEFINED_KEYWORD,              /**< Undefined Plural keyword */
744c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    U_DEFAULT_KEYWORD_MISSING,        /**< Missing DEFAULT rule in plural rules */
74550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    U_DECIMAL_NUMBER_SYNTAX_ERROR,    /**< Decimal number syntax error */
746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_FMT_PARSE_ERROR_LIMIT,          /**< The limit for format library errors */
747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * the error code range 0x10200 0x102ff are reserved for Break Iterator related error
750b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_BRK_INTERNAL_ERROR=0x10200,          /**< An internal error (bug) was detected.             */
752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_BRK_ERROR_START=0x10200,             /**< Start of codes indicating Break Iterator failures */
753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_BRK_HEX_DIGITS_EXPECTED,             /**< Hex digits expected as part of a escaped char in a rule. */
754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_BRK_SEMICOLON_EXPECTED,              /**< Missing ';' at the end of a RBBI rule.            */
755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_BRK_RULE_SYNTAX,                     /**< Syntax error in RBBI rule.                        */
756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_BRK_UNCLOSED_SET,                    /**< UnicodeSet witing an RBBI rule missing a closing ']'.  */
757b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_BRK_ASSIGN_ERROR,                    /**< Syntax error in RBBI rule assignment statement.   */
758b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_BRK_VARIABLE_REDFINITION,            /**< RBBI rule $Variable redefined.                    */
759b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_BRK_MISMATCHED_PAREN,                /**< Mis-matched parentheses in an RBBI rule.          */
760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_BRK_NEW_LINE_IN_QUOTED_STRING,       /**< Missing closing quote in an RBBI rule.            */
761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_BRK_UNDEFINED_VARIABLE,              /**< Use of an undefined $Variable in an RBBI rule.    */
762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_BRK_INIT_ERROR,                      /**< Initialization failure.  Probable missing ICU Data. */
763b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_BRK_RULE_EMPTY_SET,                  /**< Rule contains an empty Unicode Set.               */
764b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_BRK_UNRECOGNIZED_OPTION,             /**< !!option in RBBI rules not recognized.            */
765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_BRK_MALFORMED_RULE_TAG,              /**< The {nnn} tag on a rule is mal formed             */
766b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_BRK_ERROR_LIMIT,                     /**< This must always be the last value to indicate the limit for Break Iterator failures */
767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * The error codes in the range 0x10300-0x103ff are reserved for regular expression related errrs
770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_REGEX_INTERNAL_ERROR=0x10300,       /**< An internal error (bug) was detected.              */
772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_REGEX_ERROR_START=0x10300,          /**< Start of codes indicating Regexp failures          */
773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_REGEX_RULE_SYNTAX,                  /**< Syntax error in regexp pattern.                    */
774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_REGEX_INVALID_STATE,                /**< RegexMatcher in invalid state for requested operation */
775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_REGEX_BAD_ESCAPE_SEQUENCE,          /**< Unrecognized backslash escape sequence in pattern  */
776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_REGEX_PROPERTY_SYNTAX,              /**< Incorrect Unicode property                         */
777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_REGEX_UNIMPLEMENTED,                /**< Use of regexp feature that is not yet implemented. */
778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_REGEX_MISMATCHED_PAREN,             /**< Incorrectly nested parentheses in regexp pattern.  */
779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_REGEX_NUMBER_TOO_BIG,               /**< Decimal number is too large.                       */
780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_REGEX_BAD_INTERVAL,                 /**< Error in {min,max} interval                        */
781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_REGEX_MAX_LT_MIN,                   /**< In {min,max}, max is less than min.                */
782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_REGEX_INVALID_BACK_REF,             /**< Back-reference to a non-existent capture group.    */
783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_REGEX_INVALID_FLAG,                 /**< Invalid value for match mode flags.                */
784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_REGEX_LOOK_BEHIND_LIMIT,            /**< Look-Behind pattern matches must have a bounded maximum length.    */
785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_REGEX_SET_CONTAINS_STRING,          /**< Regexps cannot have UnicodeSets containing strings.*/
786c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    U_REGEX_OCTAL_TOO_BIG,                /**< Octal character constants must be <= 0377.         */
787c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    U_REGEX_MISSING_CLOSE_BRACKET,        /**< Missing closing bracket on a bracket expression.   */
788c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    U_REGEX_INVALID_RANGE,                /**< In a character range [x-y], x is greater than y.   */
789c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    U_REGEX_STACK_OVERFLOW,               /**< Regular expression backtrack stack overflow.       */
790c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    U_REGEX_TIME_OUT,                     /**< Maximum allowed match time exceeded                */
791c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    U_REGEX_STOPPED_BY_CALLER,            /**< Matching operation aborted by user callback fn.    */
792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_REGEX_ERROR_LIMIT,                  /**< This must always be the last value to indicate the limit for regexp errors */
793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * The error code in the range 0x10400-0x104ff are reserved for IDNA related error codes
796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_IDNA_PROHIBITED_ERROR=0x10400,
798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_IDNA_ERROR_START=0x10400,
799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_IDNA_UNASSIGNED_ERROR,
800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_IDNA_CHECK_BIDI_ERROR,
801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_IDNA_STD3_ASCII_RULES_ERROR,
802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_IDNA_ACE_PREFIX_ERROR,
803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_IDNA_VERIFICATION_ERROR,
804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_IDNA_LABEL_TOO_LONG_ERROR,
805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_IDNA_ZERO_LENGTH_LABEL_ERROR,
806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_IDNA_DOMAIN_NAME_TOO_LONG_ERROR,
807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_IDNA_ERROR_LIMIT,
808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Aliases for StringPrep
810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_STRINGPREP_PROHIBITED_ERROR = U_IDNA_PROHIBITED_ERROR,
812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_STRINGPREP_UNASSIGNED_ERROR = U_IDNA_UNASSIGNED_ERROR,
813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_STRINGPREP_CHECK_BIDI_ERROR = U_IDNA_CHECK_BIDI_ERROR,
81450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
81550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    /*
81650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * The error code in the range 0x10500-0x105ff are reserved for Plugin related error codes
81750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     */
81850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    U_PLUGIN_ERROR_START=0x10500,         /**< Start of codes indicating plugin failures */
81950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    U_PLUGIN_TOO_HIGH=0x10500,            /**< The plugin's level is too high to be loaded right now. */
82050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    U_PLUGIN_DIDNT_SET_LEVEL,             /**< The plugin didn't call uplug_setPlugLevel in response to a QUERY */
82150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    U_PLUGIN_ERROR_LIMIT,                 /**< This must always be the last value to indicate the limit for plugin errors */
822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
82350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    U_ERROR_LIMIT=U_PLUGIN_ERROR_LIMIT      /**< This must always be the last value to indicate the limit for UErrorCode (last error code +1) */
824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} UErrorCode;
825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Use the following to determine if an UErrorCode represents */
827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* operational success or failure. */
828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifdef XP_CPLUSPLUS
830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Does the error code indicate success?
832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.0
833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    static
835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    inline UBool U_SUCCESS(UErrorCode code) { return (UBool)(code<=U_ZERO_ERROR); }
836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Does the error code indicate a failure?
838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.0
839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    static
841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    inline UBool U_FAILURE(UErrorCode code) { return (UBool)(code>U_ZERO_ERROR); }
842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#else
843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Does the error code indicate success?
845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.0
846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#   define U_SUCCESS(x) ((x)<=U_ZERO_ERROR)
848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Does the error code indicate a failure?
850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.0
851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#   define U_FAILURE(x) ((x)>U_ZERO_ERROR)
853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif
854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Return a string for a UErrorCode value.
857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * The string will be the same as the name of the error code constant
858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * in the UErrorCode enum above.
859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0
860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_STABLE const char * U_EXPORT2
862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruu_errorName(UErrorCode code);
863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* _UTYPES */
866