~ubuntu-branches/ubuntu/maverick/webkit/maverick

« back to all changes in this revision

Viewing changes to JavaScriptCore/icu/unicode/utypes.h

  • Committer: Bazaar Package Importer
  • Author(s): Mike Hommey
  • Date: 2007-08-19 15:54:12 UTC
  • Revision ID: james.westby@ubuntu.com-20070819155412-uxxg1h9plpghmtbi
Tags: upstream-0~svn25144
ImportĀ upstreamĀ versionĀ 0~svn25144

Show diffs side-by-side

added added

removed removed

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