16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*
26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org**********************************************************************
36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   Copyright (C) 1996-2012, International Business Machines
46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   Corporation and others.  All Rights Reserved.
56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org**********************************************************************
66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*
76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*  FILE NAME : UTYPES.H (formerly ptypes.h)
86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*
96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   Date        Name        Description
106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   12/11/96    helena      Creation.
116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   02/27/97    aliu        Added typedefs for UClassID, int8, int16, int32,
126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*                           uint8, uint16, and uint32.
136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   04/01/97    aliu        Added XP_CPLUSPLUS and modified to work under C as
146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*                            well as C++.
156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*                           Modified to use memcpy() for uprv_arrayCopy() fns.
166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   04/14/97    aliu        Added TPlatformUtilities.
176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   05/07/97    aliu        Added import/export specifiers (replacing the old
186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*                           broken EXT_CLASS).  Added version number for our
196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*                           code.  Cleaned up header.
206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*    6/20/97    helena      Java class name change.
216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   08/11/98    stephen     UErrorCode changed from typedef to enum
226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   08/12/98    erm         Changed T_ANALYTIC_PACKAGE_VERSION to 3
236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   08/14/98    stephen     Added uprv_arrayCopy() for int8_t, int16_t, int32_t
246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   12/09/98    jfitz       Added BUFFER_OVERFLOW_ERROR (bug 1100066)
256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   04/20/99    stephen     Cleaned up & reworked for autoconf.
266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*                           Renamed to utypes.h.
276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   05/05/99    stephen     Changed to use <inttypes.h>
286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   12/07/99    helena      Moved copyright notice string from ucnv_bld.h here.
296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*******************************************************************************
306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/
316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef UTYPES_H
336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define UTYPES_H
346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/umachine.h"
376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/uversion.h"
386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/uconfig.h"
396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include <float.h>
406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !U_NO_DEFAULT_INCLUDE_UTF_HEADERS
426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#   include "unicode/utf.h"
436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif
446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*!
466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \file
476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \brief Basic definitions for ICU, for both C and C++ APIs
486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This file defines basic types, constants, and enumerations directly or
506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * indirectly by including other header files, especially utf.h for the
516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * basic character and string definitions and umachine.h for consistent
526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * integer and other types.
536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \def U_SHOW_CPLUSPLUS_API
586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal
596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifdef __cplusplus
616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#   ifndef U_SHOW_CPLUSPLUS_API
626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#       define U_SHOW_CPLUSPLUS_API 1
636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#   endif
646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#else
656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#   undef U_SHOW_CPLUSPLUS_API
666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#   define U_SHOW_CPLUSPLUS_API 0
676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif
686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** @{ API visibility control */
706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \def U_HIDE_DRAFT_API
736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Define this to 1 to request that draft API be "hidden"
746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal
756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \def U_HIDE_INTERNAL_API
786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Define this to 1 to request that internal API be "hidden"
796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal
806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !U_DEFAULT_SHOW_DRAFT && !defined(U_SHOW_DRAFT_API)
826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_HIDE_DRAFT_API 1
836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif
846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !U_DEFAULT_SHOW_DRAFT && !defined(U_SHOW_INTERNAL_API)
856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_HIDE_INTERNAL_API 1
866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif
876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** @} */
896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*===========================================================================*/
916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* ICUDATA naming scheme                                                     */
926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*===========================================================================*/
936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \def U_ICUDATA_TYPE_LETTER
966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This is a platform-dependent string containing one letter:
986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * - b for big-endian, ASCII-family platforms
996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * - l for little-endian, ASCII-family platforms
1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * - e for big-endian, EBCDIC-family platforms
1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This letter is part of the common data file name.
1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0
1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \def U_ICUDATA_TYPE_LITLETTER
1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The non-string form of U_ICUDATA_TYPE_LETTER
1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0
1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if U_CHARSET_FAMILY
1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#   if U_IS_BIG_ENDIAN
1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   /* EBCDIC - should always be BE */
1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#     define U_ICUDATA_TYPE_LETTER "e"
1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#     define U_ICUDATA_TYPE_LITLETTER e
1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#   else
1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#     error "Don't know what to do with little endian EBCDIC!"
1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#     define U_ICUDATA_TYPE_LETTER "x"
1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#     define U_ICUDATA_TYPE_LITLETTER x
1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#   endif
1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#else
1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#   if U_IS_BIG_ENDIAN
1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      /* Big-endian ASCII */
1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#     define U_ICUDATA_TYPE_LETTER "b"
1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#     define U_ICUDATA_TYPE_LITLETTER b
1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#   else
1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      /* Little-endian ASCII */
1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#     define U_ICUDATA_TYPE_LETTER "l"
1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#     define U_ICUDATA_TYPE_LITLETTER l
1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#   endif
1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif
1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * A single string literal containing the icudata stub name. i.e. 'icudt18e' for
1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * ICU 1.8.x on EBCDIC, etc..
1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0
1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_ICUDATA_NAME    "icudt" U_ICU_VERSION_SHORT U_ICUDATA_TYPE_LETTER
1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef U_HIDE_INTERNAL_API
1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_USRDATA_NAME    "usrdt" U_ICU_VERSION_SHORT U_ICUDATA_TYPE_LETTER  /**< @internal */
1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_USE_USRDATA     1  /**< @internal */
1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif  /* U_HIDE_INTERNAL_API */
1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *  U_ICU_ENTRY_POINT is the name of the DLL entry point to the ICU data library.
1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *    Defined as a literal, not a string.
1466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *    Tricky Preprocessor use - ## operator replaces macro paramters with the literal string
1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                              from the corresponding macro invocation, _before_ other macro substitutions.
1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                              Need a nested \#defines to get the actual version numbers rather than
1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                              the literal text U_ICU_VERSION_MAJOR_NUM into the name.
1506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                              The net result will be something of the form
1516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                                  \#define U_ICU_ENTRY_POINT icudt19_dat
1526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.4
1536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
1546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_ICUDATA_ENTRY_POINT  U_DEF2_ICUDATA_ENTRY_POINT(U_ICU_VERSION_MAJOR_NUM,U_LIB_SUFFIX_C_NAME)
1556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef U_HIDE_INTERNAL_API
1576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
1586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Do not use. Note that it's OK for the 2nd argument to be undefined (literal).
1596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal
1606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
1616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_DEF2_ICUDATA_ENTRY_POINT(major,suff) U_DEF_ICUDATA_ENTRY_POINT(major,suff)
1626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
1646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Do not use.
1656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal
1666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
1676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef U_DEF_ICUDATA_ENTRY_POINT
1686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* affected by symbol renaming. See platform.h */
1696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef U_LIB_SUFFIX_C_NAME
1706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_DEF_ICUDATA_ENTRY_POINT(major, suff) icudt##major##_dat
1716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#else
1726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_DEF_ICUDATA_ENTRY_POINT(major, suff) icudt##suff ## major##_dat
1736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif
1746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif
1756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif  /* U_HIDE_INTERNAL_API */
1766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
1786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \def NULL
1796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Define NULL if necessary, to 0 for C++ and to ((void *)0) for C.
1806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0
1816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
1826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef NULL
1836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifdef __cplusplus
1846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define NULL    0
1856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#else
1866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define NULL    ((void *)0)
1876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif
1886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif
1896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*===========================================================================*/
1916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* Calendar/TimeZone data types                                              */
1926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*===========================================================================*/
1936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
1956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Date and Time data type.
1966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This is a primitive data type that holds the date and time
1976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * as the number of milliseconds since 1970-jan-01, 00:00 UTC.
1986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * UTC leap seconds are ignored.
1996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0
2006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
2016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgtypedef double UDate;
2026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** The number of milliseconds per second @stable ICU 2.0 */
2046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_MILLIS_PER_SECOND        (1000)
2056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** The number of milliseconds per minute @stable ICU 2.0 */
2066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_MILLIS_PER_MINUTE       (60000)
2076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** The number of milliseconds per hour @stable ICU 2.0 */
2086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_MILLIS_PER_HOUR       (3600000)
2096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** The number of milliseconds per day @stable ICU 2.0 */
2106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_MILLIS_PER_DAY       (86400000)
2116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
2136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Maximum UDate value
2146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 4.8
2156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
2166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_DATE_MAX DBL_MAX
2176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
2196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Minimum UDate value
2206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 4.8
2216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
2226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_DATE_MIN -U_DATE_MAX
2236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*===========================================================================*/
2256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* Shared library/DLL import-export API control                              */
2266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*===========================================================================*/
2276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*
2296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Control of symbol import/export.
2306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * ICU is separated into three libraries.
2316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
2326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
2346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \def U_COMBINED_IMPLEMENTATION
2356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Set to export library symbols from inside the ICU library
2366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * when all of ICU is in a single library.
2376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This can be set as a compiler option while building ICU, and it
2386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * needs to be the first one tested to override U_COMMON_API, U_I18N_API, etc.
2396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0
2406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
2416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
2436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \def U_DATA_API
2446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Set to export library symbols from inside the stubdata library,
2456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * and to import them from outside.
2466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 3.0
2476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
2486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
2506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \def U_COMMON_API
2516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Set to export library symbols from inside the common library,
2526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * and to import them from outside.
2536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0
2546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
2556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
2576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \def U_I18N_API
2586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Set to export library symbols from inside the i18n library,
2596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * and to import them from outside.
2606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0
2616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
2626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
2646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \def U_LAYOUT_API
2656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Set to export library symbols from inside the layout engine library,
2666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * and to import them from outside.
2676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0
2686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
2696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
2716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \def U_LAYOUTEX_API
2726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Set to export library symbols from inside the layout extensions library,
2736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * and to import them from outside.
2746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.6
2756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
2766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
2786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \def U_IO_API
2796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Set to export library symbols from inside the ustdio library,
2806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * and to import them from outside.
2816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0
2826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
2836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
2856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \def U_TOOLUTIL_API
2866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Set to export library symbols from inside the toolutil library,
2876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * and to import them from outside.
2886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 3.4
2896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
2906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if defined(U_COMBINED_IMPLEMENTATION)
2926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_DATA_API     U_EXPORT
2936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_COMMON_API   U_EXPORT
2946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_I18N_API     U_EXPORT
2956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_LAYOUT_API   U_EXPORT
2966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_LAYOUTEX_API U_EXPORT
2976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_IO_API       U_EXPORT
2986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_TOOLUTIL_API U_EXPORT
2996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#elif defined(U_STATIC_IMPLEMENTATION)
3006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_DATA_API
3016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_COMMON_API
3026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_I18N_API
3036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_LAYOUT_API
3046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_LAYOUTEX_API
3056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_IO_API
3066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_TOOLUTIL_API
3076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#elif defined(U_COMMON_IMPLEMENTATION)
3084dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org#define U_DATA_API     U_EXPORT
3096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_COMMON_API   U_EXPORT
3106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_I18N_API     U_IMPORT
3116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_LAYOUT_API   U_IMPORT
3126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_LAYOUTEX_API U_IMPORT
3136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_IO_API       U_IMPORT
3146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_TOOLUTIL_API U_IMPORT
3156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#elif defined(U_I18N_IMPLEMENTATION)
3166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_DATA_API     U_IMPORT
3176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_COMMON_API   U_IMPORT
3186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_I18N_API     U_EXPORT
3196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_LAYOUT_API   U_IMPORT
3206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_LAYOUTEX_API U_IMPORT
3216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_IO_API       U_IMPORT
3226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_TOOLUTIL_API U_IMPORT
3236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#elif defined(U_LAYOUT_IMPLEMENTATION)
3246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_DATA_API     U_IMPORT
3256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_COMMON_API   U_IMPORT
3266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_I18N_API     U_IMPORT
3276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_LAYOUT_API   U_EXPORT
3286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_LAYOUTEX_API U_IMPORT
3296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_IO_API       U_IMPORT
3306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_TOOLUTIL_API U_IMPORT
3316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#elif defined(U_LAYOUTEX_IMPLEMENTATION)
3326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_DATA_API     U_IMPORT
3336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_COMMON_API   U_IMPORT
3346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_I18N_API     U_IMPORT
3356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_LAYOUT_API   U_IMPORT
3366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_LAYOUTEX_API U_EXPORT
3376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_IO_API       U_IMPORT
3386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_TOOLUTIL_API U_IMPORT
3396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#elif defined(U_IO_IMPLEMENTATION)
3406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_DATA_API     U_IMPORT
3416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_COMMON_API   U_IMPORT
3426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_I18N_API     U_IMPORT
3436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_LAYOUT_API   U_IMPORT
3446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_LAYOUTEX_API U_IMPORT
3456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_IO_API       U_EXPORT
3466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_TOOLUTIL_API U_IMPORT
3476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#elif defined(U_TOOLUTIL_IMPLEMENTATION)
3486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_DATA_API     U_IMPORT
3496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_COMMON_API   U_IMPORT
3506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_I18N_API     U_IMPORT
3516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_LAYOUT_API   U_IMPORT
3526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_LAYOUTEX_API U_IMPORT
3536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_IO_API       U_IMPORT
3546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_TOOLUTIL_API U_EXPORT
3556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#else
3566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_DATA_API     U_IMPORT
3576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_COMMON_API   U_IMPORT
3586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_I18N_API     U_IMPORT
3596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_LAYOUT_API   U_IMPORT
3606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_LAYOUTEX_API U_IMPORT
3616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_IO_API       U_IMPORT
3626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_TOOLUTIL_API U_IMPORT
3636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif
3646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
3666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \def U_STANDARD_CPP_NAMESPACE
3676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Control of C++ Namespace
3686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0
3696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
3706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifdef __cplusplus
3716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_STANDARD_CPP_NAMESPACE        ::
3726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#else
3736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_STANDARD_CPP_NAMESPACE
3746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif
3756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*===========================================================================*/
3786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* Global delete operator                                                    */
3796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*===========================================================================*/
3806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*
3826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The ICU4C library must not use the global new and delete operators.
3836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * These operators here are defined to enable testing for this.
3846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * See Jitterbug 2581 for details of why this is necessary.
3856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
3866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Verification that ICU4C's memory usage is correct, i.e.,
3876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * that global new/delete are not used:
3886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
3896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * a) Check for imports of global new/delete (see uobject.cpp for details)
3906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * b) Verify that new is never imported.
3916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * c) Verify that delete is only imported from object code for interface/mixin classes.
3926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * d) Add global delete and delete[] only for the ICU4C library itself
3936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *    and define them in a way that crashes or otherwise easily shows a problem.
3946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
3956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The following implements d).
3966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The operator implementations crash; this is intentional and used for library debugging.
3976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
3986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Note: This is currently only done on Windows because
3996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * some Linux/Unix compilers have problems with defining global new/delete.
4006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * On Windows, it is _MSC_VER>=1200 for MSVC 6.0 and higher.
4016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
4026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if defined(__cplusplus) && 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))
4036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef U_HIDE_INTERNAL_API
4056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
4066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Global operator new, defined only inside ICU4C, must not be used.
4076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Crashes intentionally.
4086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal
4096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
4106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline void *
4116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgoperator new(size_t /*size*/) {
4126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    char *q=NULL;
4136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    *q=5; /* break it */
4146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    return q;
4156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
4166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifdef _Ret_bytecap_
4186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* This is only needed to suppress a Visual C++ 2008 warning for operator new[]. */
4196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org_Ret_bytecap_(_Size)
4206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif
4216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
4226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Global operator new[], defined only inside ICU4C, must not be used.
4236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Crashes intentionally.
4246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal
4256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
4266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline void *
4276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgoperator new[](size_t /*size*/) {
4286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    char *q=NULL;
4296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    *q=5; /* break it */
4306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    return q;
4316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
4326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
4346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Global operator delete, defined only inside ICU4C, must not be used.
4356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Crashes intentionally.
4366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal
4376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
4386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline void
4396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgoperator delete(void * /*p*/) {
4406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    char *q=NULL;
4416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    *q=5; /* break it */
4426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
4436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
4456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Global operator delete[], defined only inside ICU4C, must not be used.
4466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Crashes intentionally.
4476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal
4486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
4496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline void
4506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgoperator delete[](void * /*p*/) {
4516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    char *q=NULL;
4526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    *q=5; /* break it */
4536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
4546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif /* U_HIDE_INTERNAL_API */
4566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif
4576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*===========================================================================*/
4596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* UErrorCode */
4606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*===========================================================================*/
4616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
4636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Error code to replace exception handling, so that the code is compatible with all C++ compilers,
4646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * and to use the same mechanism for C and C++.
4656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
4666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \par
4676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * ICU functions that take a reference (C++) or a pointer (C) to a UErrorCode
4686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * first test if(U_FAILURE(errorCode)) { return immediately; }
4696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * so that in a chain of such functions the first one that sets an error code
4706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * causes the following ones to not perform any operations.
4716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
4726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \par
4736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Error codes should be tested using U_FAILURE() and U_SUCCESS().
4746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0
4756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
4766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgtypedef enum UErrorCode {
4776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /* The ordering of U_ERROR_INFO_START Vs U_USING_FALLBACK_WARNING looks weird
4786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * and is that way because VC++ debugger displays first encountered constant,
4796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * which is not the what the code is used for
4806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
4816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_USING_FALLBACK_WARNING  = -128,   /**< A resource bundle lookup returned a fallback result (not an error) */
4836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_ERROR_WARNING_START     = -128,   /**< Start of information results (semantically successful) */
4856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_USING_DEFAULT_WARNING   = -127,   /**< A resource bundle lookup returned a result from the root locale (not an error) */
4876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_SAFECLONE_ALLOCATED_WARNING = -126, /**< A SafeClone operation required allocating memory (informational only) */
4896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_STATE_OLD_WARNING       = -125,   /**< ICU has to use compatibility layer to construct the service. Expect performance/memory usage degradation. Consider upgrading */
4916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_STRING_NOT_TERMINATED_WARNING = -124,/**< An output string could not be NUL-terminated because output length==destCapacity. */
4936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_SORT_KEY_TOO_SHORT_WARNING = -123, /**< Number of levels requested in getBound is higher than the number of levels in the sort key */
4956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_AMBIGUOUS_ALIAS_WARNING = -122,   /**< This converter alias can go to different converter implementations */
4976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    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 */
4996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_PLUGIN_CHANGED_LEVEL_WARNING = -120, /**< A plugin caused a level change. May not be an error, but later plugins may not load. */
5016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_ERROR_WARNING_LIMIT,              /**< This must always be the last warning value to indicate the limit for UErrorCode warnings (last warning code +1) */
5036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_ZERO_ERROR              =  0,     /**< No error, no warning. */
5066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_ILLEGAL_ARGUMENT_ERROR  =  1,     /**< Start of codes indicating failure */
5086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_MISSING_RESOURCE_ERROR  =  2,     /**< The requested resource cannot be found */
5096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_INVALID_FORMAT_ERROR    =  3,     /**< Data format is not what is expected */
5106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_FILE_ACCESS_ERROR       =  4,     /**< The requested file cannot be found */
5116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_INTERNAL_PROGRAM_ERROR  =  5,     /**< Indicates a bug in the library code */
5126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_MESSAGE_PARSE_ERROR     =  6,     /**< Unable to parse a message (message format) */
5136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_MEMORY_ALLOCATION_ERROR =  7,     /**< Memory allocation error */
5146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_INDEX_OUTOFBOUNDS_ERROR =  8,     /**< Trying to access the index that is out of bounds */
5156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_PARSE_ERROR             =  9,     /**< Equivalent to Java ParseException */
5166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_INVALID_CHAR_FOUND      = 10,     /**< Character conversion: Unmappable input sequence. In other APIs: Invalid character. */
5176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_TRUNCATED_CHAR_FOUND    = 11,     /**< Character conversion: Incomplete input sequence. */
5186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_ILLEGAL_CHAR_FOUND      = 12,     /**< Character conversion: Illegal input sequence/combination of input units. */
5196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_INVALID_TABLE_FORMAT    = 13,     /**< Conversion table file found, but corrupted */
5206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_INVALID_TABLE_FILE      = 14,     /**< Conversion table file not found */
5216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_BUFFER_OVERFLOW_ERROR   = 15,     /**< A result would not fit in the supplied buffer */
5226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_UNSUPPORTED_ERROR       = 16,     /**< Requested operation not supported in current context */
5236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_RESOURCE_TYPE_MISMATCH  = 17,     /**< an operation is requested over a resource that does not support it */
5246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_ILLEGAL_ESCAPE_SEQUENCE = 18,     /**< ISO-2022 illlegal escape sequence */
5256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_UNSUPPORTED_ESCAPE_SEQUENCE = 19, /**< ISO-2022 unsupported escape sequence */
5266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_NO_SPACE_AVAILABLE      = 20,     /**< No space available for in-buffer expansion for Arabic shaping */
5276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_CE_NOT_FOUND_ERROR      = 21,     /**< Currently used only while setting variable top, but can be used generally */
5286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_PRIMARY_TOO_LONG_ERROR  = 22,     /**< User tried to set variable top to a primary that is longer than two bytes */
5296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_STATE_TOO_OLD_ERROR     = 23,     /**< ICU cannot construct a service from this state, as it is no longer supported */
5306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_TOO_MANY_ALIASES_ERROR  = 24,     /**< There are too many aliases in the path to the requested resource.
5316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                                             It is very possible that a circular alias definition has occured */
5326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_ENUM_OUT_OF_SYNC_ERROR  = 25,     /**< UEnumeration out of sync with underlying collection */
5336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_INVARIANT_CONVERSION_ERROR = 26,  /**< Unable to convert a UChar* string to char* with the invariant converter. */
5346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_INVALID_STATE_ERROR     = 27,     /**< Requested operation can not be completed with ICU in its current state */
5356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_COLLATOR_VERSION_MISMATCH = 28,   /**< Collator version is not compatible with the base version */
5366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_USELESS_COLLATOR_ERROR  = 29,     /**< Collator is options only and no base is specified */
5376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_NO_WRITE_PERMISSION     = 30,     /**< Attempt to modify read-only or constant data. */
5386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_STANDARD_ERROR_LIMIT,             /**< This must always be the last value to indicate the limit for standard errors */
5406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /*
5416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * the error code range 0x10000 0x10100 are reserved for Transliterator
5426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
5436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_BAD_VARIABLE_DEFINITION=0x10000,/**< Missing '$' or duplicate variable name */
5446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_PARSE_ERROR_START = 0x10000,    /**< Start of Transliterator errors */
5456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_MALFORMED_RULE,                 /**< Elements of a rule are misplaced */
5466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_MALFORMED_SET,                  /**< A UnicodeSet pattern is invalid*/
5476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_MALFORMED_SYMBOL_REFERENCE,     /**< UNUSED as of ICU 2.4 */
5486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_MALFORMED_UNICODE_ESCAPE,       /**< A Unicode escape pattern is invalid*/
5496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_MALFORMED_VARIABLE_DEFINITION,  /**< A variable definition is invalid */
5506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_MALFORMED_VARIABLE_REFERENCE,   /**< A variable reference is invalid */
5516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_MISMATCHED_SEGMENT_DELIMITERS,  /**< UNUSED as of ICU 2.4 */
5526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_MISPLACED_ANCHOR_START,         /**< A start anchor appears at an illegal position */
5536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_MISPLACED_CURSOR_OFFSET,        /**< A cursor offset occurs at an illegal position */
5546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_MISPLACED_QUANTIFIER,           /**< A quantifier appears after a segment close delimiter */
5556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_MISSING_OPERATOR,               /**< A rule contains no operator */
5566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_MISSING_SEGMENT_CLOSE,          /**< UNUSED as of ICU 2.4 */
5576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_MULTIPLE_ANTE_CONTEXTS,         /**< More than one ante context */
5586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_MULTIPLE_CURSORS,               /**< More than one cursor */
5596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_MULTIPLE_POST_CONTEXTS,         /**< More than one post context */
5606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_TRAILING_BACKSLASH,             /**< A dangling backslash */
5616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_UNDEFINED_SEGMENT_REFERENCE,    /**< A segment reference does not correspond to a defined segment */
5626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_UNDEFINED_VARIABLE,             /**< A variable reference does not correspond to a defined variable */
5636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_UNQUOTED_SPECIAL,               /**< A special character was not quoted or escaped */
5646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_UNTERMINATED_QUOTE,             /**< A closing single quote is missing */
5656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_RULE_MASK_ERROR,                /**< A rule is hidden by an earlier more general rule */
5666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_MISPLACED_COMPOUND_FILTER,      /**< A compound filter is in an invalid location */
5676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_MULTIPLE_COMPOUND_FILTERS,      /**< More than one compound filter */
5686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_INVALID_RBT_SYNTAX,             /**< A "::id" rule was passed to the RuleBasedTransliterator parser */
5696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_INVALID_PROPERTY_PATTERN,       /**< UNUSED as of ICU 2.4 */
5706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_MALFORMED_PRAGMA,               /**< A 'use' pragma is invlalid */
5716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_UNCLOSED_SEGMENT,               /**< A closing ')' is missing */
5726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_ILLEGAL_CHAR_IN_SEGMENT,        /**< UNUSED as of ICU 2.4 */
5736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_VARIABLE_RANGE_EXHAUSTED,       /**< Too many stand-ins generated for the given variable range */
5746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_VARIABLE_RANGE_OVERLAP,         /**< The variable range overlaps characters used in rules */
5756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_ILLEGAL_CHARACTER,              /**< A special character is outside its allowed context */
5766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_INTERNAL_TRANSLITERATOR_ERROR,  /**< Internal transliterator system error */
5776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_INVALID_ID,                     /**< A "::id" rule specifies an unknown transliterator */
5786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_INVALID_FUNCTION,               /**< A "&fn()" rule specifies an unknown transliterator */
5796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_PARSE_ERROR_LIMIT,              /**< The limit for Transliterator errors */
5806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /*
5826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * the error code range 0x10100 0x10200 are reserved for formatting API parsing error
5836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
5846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_UNEXPECTED_TOKEN=0x10100,       /**< Syntax error in format pattern */
5856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_FMT_PARSE_ERROR_START=0x10100,  /**< Start of format library errors */
5866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_MULTIPLE_DECIMAL_SEPARATORS,    /**< More than one decimal separator in number pattern */
5876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_MULTIPLE_DECIMAL_SEPERATORS = U_MULTIPLE_DECIMAL_SEPARATORS, /**< Typo: kept for backward compatibility. Use U_MULTIPLE_DECIMAL_SEPARATORS */
5886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_MULTIPLE_EXPONENTIAL_SYMBOLS,   /**< More than one exponent symbol in number pattern */
5896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_MALFORMED_EXPONENTIAL_PATTERN,  /**< Grouping symbol in exponent pattern */
5906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_MULTIPLE_PERCENT_SYMBOLS,       /**< More than one percent symbol in number pattern */
5916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_MULTIPLE_PERMILL_SYMBOLS,       /**< More than one permill symbol in number pattern */
5926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_MULTIPLE_PAD_SPECIFIERS,        /**< More than one pad symbol in number pattern */
5936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_PATTERN_SYNTAX_ERROR,           /**< Syntax error in format pattern */
5946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_ILLEGAL_PAD_POSITION,           /**< Pad symbol misplaced in number pattern */
5956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_UNMATCHED_BRACES,               /**< Braces do not match in message pattern */
5966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_UNSUPPORTED_PROPERTY,           /**< UNUSED as of ICU 2.4 */
5976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_UNSUPPORTED_ATTRIBUTE,          /**< UNUSED as of ICU 2.4 */
5986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_ARGUMENT_TYPE_MISMATCH,         /**< Argument name and argument index mismatch in MessageFormat functions */
5996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_DUPLICATE_KEYWORD,              /**< Duplicate keyword in PluralFormat */
6006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_UNDEFINED_KEYWORD,              /**< Undefined Plural keyword */
6016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_DEFAULT_KEYWORD_MISSING,        /**< Missing DEFAULT rule in plural rules */
6026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_DECIMAL_NUMBER_SYNTAX_ERROR,    /**< Decimal number syntax error */
6036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_FORMAT_INEXACT_ERROR,           /**< Cannot format a number exactly and rounding mode is ROUND_UNNECESSARY @stable ICU 4.8 */
6046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_FMT_PARSE_ERROR_LIMIT,          /**< The limit for format library errors */
6056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /*
6076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * the error code range 0x10200 0x102ff are reserved for Break Iterator related error
6086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
6096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_BRK_INTERNAL_ERROR=0x10200,          /**< An internal error (bug) was detected.             */
6106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_BRK_ERROR_START=0x10200,             /**< Start of codes indicating Break Iterator failures */
6116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_BRK_HEX_DIGITS_EXPECTED,             /**< Hex digits expected as part of a escaped char in a rule. */
6126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_BRK_SEMICOLON_EXPECTED,              /**< Missing ';' at the end of a RBBI rule.            */
6136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_BRK_RULE_SYNTAX,                     /**< Syntax error in RBBI rule.                        */
6146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_BRK_UNCLOSED_SET,                    /**< UnicodeSet witing an RBBI rule missing a closing ']'.  */
6156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_BRK_ASSIGN_ERROR,                    /**< Syntax error in RBBI rule assignment statement.   */
6166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_BRK_VARIABLE_REDFINITION,            /**< RBBI rule $Variable redefined.                    */
6176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_BRK_MISMATCHED_PAREN,                /**< Mis-matched parentheses in an RBBI rule.          */
6186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_BRK_NEW_LINE_IN_QUOTED_STRING,       /**< Missing closing quote in an RBBI rule.            */
6196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_BRK_UNDEFINED_VARIABLE,              /**< Use of an undefined $Variable in an RBBI rule.    */
6206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_BRK_INIT_ERROR,                      /**< Initialization failure.  Probable missing ICU Data. */
6216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_BRK_RULE_EMPTY_SET,                  /**< Rule contains an empty Unicode Set.               */
6226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_BRK_UNRECOGNIZED_OPTION,             /**< !!option in RBBI rules not recognized.            */
6236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_BRK_MALFORMED_RULE_TAG,              /**< The {nnn} tag on a rule is mal formed             */
6246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_BRK_ERROR_LIMIT,                     /**< This must always be the last value to indicate the limit for Break Iterator failures */
6256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /*
6276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * The error codes in the range 0x10300-0x103ff are reserved for regular expression related errrs
6286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
6296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_REGEX_INTERNAL_ERROR=0x10300,       /**< An internal error (bug) was detected.              */
6306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_REGEX_ERROR_START=0x10300,          /**< Start of codes indicating Regexp failures          */
6316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_REGEX_RULE_SYNTAX,                  /**< Syntax error in regexp pattern.                    */
6326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_REGEX_INVALID_STATE,                /**< RegexMatcher in invalid state for requested operation */
6336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_REGEX_BAD_ESCAPE_SEQUENCE,          /**< Unrecognized backslash escape sequence in pattern  */
6346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_REGEX_PROPERTY_SYNTAX,              /**< Incorrect Unicode property                         */
6356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_REGEX_UNIMPLEMENTED,                /**< Use of regexp feature that is not yet implemented. */
6366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_REGEX_MISMATCHED_PAREN,             /**< Incorrectly nested parentheses in regexp pattern.  */
6376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_REGEX_NUMBER_TOO_BIG,               /**< Decimal number is too large.                       */
6386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_REGEX_BAD_INTERVAL,                 /**< Error in {min,max} interval                        */
6396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_REGEX_MAX_LT_MIN,                   /**< In {min,max}, max is less than min.                */
6406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_REGEX_INVALID_BACK_REF,             /**< Back-reference to a non-existent capture group.    */
6416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_REGEX_INVALID_FLAG,                 /**< Invalid value for match mode flags.                */
6426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_REGEX_LOOK_BEHIND_LIMIT,            /**< Look-Behind pattern matches must have a bounded maximum length.    */
6436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_REGEX_SET_CONTAINS_STRING,          /**< Regexps cannot have UnicodeSets containing strings.*/
6446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_REGEX_OCTAL_TOO_BIG,                /**< Octal character constants must be <= 0377.         */
6456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_REGEX_MISSING_CLOSE_BRACKET,        /**< Missing closing bracket on a bracket expression.   */
6466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_REGEX_INVALID_RANGE,                /**< In a character range [x-y], x is greater than y.   */
6476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_REGEX_STACK_OVERFLOW,               /**< Regular expression backtrack stack overflow.       */
6486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_REGEX_TIME_OUT,                     /**< Maximum allowed match time exceeded                */
6496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_REGEX_STOPPED_BY_CALLER,            /**< Matching operation aborted by user callback fn.    */
6506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_REGEX_ERROR_LIMIT,                  /**< This must always be the last value to indicate the limit for regexp errors */
6516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /*
6536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * The error code in the range 0x10400-0x104ff are reserved for IDNA related error codes
6546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
6556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_IDNA_PROHIBITED_ERROR=0x10400,
6566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_IDNA_ERROR_START=0x10400,
6576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_IDNA_UNASSIGNED_ERROR,
6586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_IDNA_CHECK_BIDI_ERROR,
6596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_IDNA_STD3_ASCII_RULES_ERROR,
6606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_IDNA_ACE_PREFIX_ERROR,
6616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_IDNA_VERIFICATION_ERROR,
6626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_IDNA_LABEL_TOO_LONG_ERROR,
6636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_IDNA_ZERO_LENGTH_LABEL_ERROR,
6646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_IDNA_DOMAIN_NAME_TOO_LONG_ERROR,
6656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_IDNA_ERROR_LIMIT,
6666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /*
6676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Aliases for StringPrep
6686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
6696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_STRINGPREP_PROHIBITED_ERROR = U_IDNA_PROHIBITED_ERROR,
6706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_STRINGPREP_UNASSIGNED_ERROR = U_IDNA_UNASSIGNED_ERROR,
6716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_STRINGPREP_CHECK_BIDI_ERROR = U_IDNA_CHECK_BIDI_ERROR,
6726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /*
6746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * The error code in the range 0x10500-0x105ff are reserved for Plugin related error codes
6756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
6766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_PLUGIN_ERROR_START=0x10500,         /**< Start of codes indicating plugin failures */
6776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_PLUGIN_TOO_HIGH=0x10500,            /**< The plugin's level is too high to be loaded right now. */
6786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_PLUGIN_DIDNT_SET_LEVEL,             /**< The plugin didn't call uplug_setPlugLevel in response to a QUERY */
6796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_PLUGIN_ERROR_LIMIT,                 /**< This must always be the last value to indicate the limit for plugin errors */
6806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_ERROR_LIMIT=U_PLUGIN_ERROR_LIMIT      /**< This must always be the last value to indicate the limit for UErrorCode (last error code +1) */
6826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} UErrorCode;
6836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* Use the following to determine if an UErrorCode represents */
6856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* operational success or failure. */
6866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifdef __cplusplus
6886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
6896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Does the error code indicate success?
6906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
6916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
6926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    static
6936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    inline UBool U_SUCCESS(UErrorCode code) { return (UBool)(code<=U_ZERO_ERROR); }
6946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
6956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Does the error code indicate a failure?
6966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
6976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
6986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    static
6996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    inline UBool U_FAILURE(UErrorCode code) { return (UBool)(code>U_ZERO_ERROR); }
7006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#else
7016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
7026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Does the error code indicate success?
7036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
7046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
7056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#   define U_SUCCESS(x) ((x)<=U_ZERO_ERROR)
7066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
7076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Does the error code indicate a failure?
7086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
7096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
7106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#   define U_FAILURE(x) ((x)>U_ZERO_ERROR)
7116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif
7126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
7136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
7146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Return a string for a UErrorCode value.
7156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The string will be the same as the name of the error code constant
7166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in the UErrorCode enum above.
7176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0
7186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
7196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE const char * U_EXPORT2
7206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgu_errorName(UErrorCode code);
7216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
7226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
7236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif /* _UTYPES */
724