ICU 49.1.1
49.1.1
|
00001 /* 00002 ********************************************************************** 00003 * Copyright (C) 1996-2012, International Business Machines 00004 * Corporation and others. All Rights Reserved. 00005 ********************************************************************** 00006 * 00007 * FILE NAME : UTYPES.H (formerly ptypes.h) 00008 * 00009 * Date Name Description 00010 * 12/11/96 helena Creation. 00011 * 02/27/97 aliu Added typedefs for UClassID, int8, int16, int32, 00012 * uint8, uint16, and uint32. 00013 * 04/01/97 aliu Added XP_CPLUSPLUS and modified to work under C as 00014 * well as C++. 00015 * Modified to use memcpy() for uprv_arrayCopy() fns. 00016 * 04/14/97 aliu Added TPlatformUtilities. 00017 * 05/07/97 aliu Added import/export specifiers (replacing the old 00018 * broken EXT_CLASS). Added version number for our 00019 * code. Cleaned up header. 00020 * 6/20/97 helena Java class name change. 00021 * 08/11/98 stephen UErrorCode changed from typedef to enum 00022 * 08/12/98 erm Changed T_ANALYTIC_PACKAGE_VERSION to 3 00023 * 08/14/98 stephen Added uprv_arrayCopy() for int8_t, int16_t, int32_t 00024 * 12/09/98 jfitz Added BUFFER_OVERFLOW_ERROR (bug 1100066) 00025 * 04/20/99 stephen Cleaned up & reworked for autoconf. 00026 * Renamed to utypes.h. 00027 * 05/05/99 stephen Changed to use <inttypes.h> 00028 * 12/07/99 helena Moved copyright notice string from ucnv_bld.h here. 00029 ******************************************************************************* 00030 */ 00031 00032 #ifndef UTYPES_H 00033 #define UTYPES_H 00034 00035 00036 #include "unicode/umachine.h" 00037 #include "unicode/uversion.h" 00038 #include "unicode/uconfig.h" 00039 #include <float.h> 00040 00041 #if !U_NO_DEFAULT_INCLUDE_UTF_HEADERS 00042 # include "unicode/utf.h" 00043 #endif 00044 00060 #ifdef __cplusplus 00061 # ifndef U_SHOW_CPLUSPLUS_API 00062 # define U_SHOW_CPLUSPLUS_API 1 00063 # endif 00064 #else 00065 # undef U_SHOW_CPLUSPLUS_API 00066 # define U_SHOW_CPLUSPLUS_API 0 00067 #endif 00068 00081 #if !U_DEFAULT_SHOW_DRAFT && !defined(U_SHOW_DRAFT_API) 00082 #define U_HIDE_DRAFT_API 1 00083 #endif 00084 #if !U_DEFAULT_SHOW_DRAFT && !defined(U_SHOW_INTERNAL_API) 00085 #define U_HIDE_INTERNAL_API 1 00086 #endif 00087 00090 /*===========================================================================*/ 00091 /* ICUDATA naming scheme */ 00092 /*===========================================================================*/ 00093 00110 #if U_CHARSET_FAMILY 00111 # if U_IS_BIG_ENDIAN 00112 /* EBCDIC - should always be BE */ 00113 # define U_ICUDATA_TYPE_LETTER "e" 00114 # define U_ICUDATA_TYPE_LITLETTER e 00115 # else 00116 # error "Don't know what to do with little endian EBCDIC!" 00117 # define U_ICUDATA_TYPE_LETTER "x" 00118 # define U_ICUDATA_TYPE_LITLETTER x 00119 # endif 00120 #else 00121 # if U_IS_BIG_ENDIAN 00122 /* Big-endian ASCII */ 00123 # define U_ICUDATA_TYPE_LETTER "b" 00124 # define U_ICUDATA_TYPE_LITLETTER b 00125 # else 00126 /* Little-endian ASCII */ 00127 # define U_ICUDATA_TYPE_LETTER "l" 00128 # define U_ICUDATA_TYPE_LITLETTER l 00129 # endif 00130 #endif 00131 00137 #define U_ICUDATA_NAME "icudt" U_ICU_VERSION_SHORT U_ICUDATA_TYPE_LETTER 00138 #ifndef U_HIDE_INTERNAL_API 00139 #define U_USRDATA_NAME "usrdt" U_ICU_VERSION_SHORT U_ICUDATA_TYPE_LETTER 00140 #define U_USE_USRDATA 1 00141 #endif /* U_HIDE_INTERNAL_API */ 00142 00154 #define U_ICUDATA_ENTRY_POINT U_DEF2_ICUDATA_ENTRY_POINT(U_ICU_VERSION_MAJOR_NUM,U_LIB_SUFFIX_C_NAME) 00155 00156 #ifndef U_HIDE_INTERNAL_API 00157 00161 #define U_DEF2_ICUDATA_ENTRY_POINT(major,suff) U_DEF_ICUDATA_ENTRY_POINT(major,suff) 00162 00167 #ifndef U_DEF_ICUDATA_ENTRY_POINT 00168 /* affected by symbol renaming. See platform.h */ 00169 #ifndef U_LIB_SUFFIX_C_NAME 00170 #define U_DEF_ICUDATA_ENTRY_POINT(major, suff) icudt##major##_dat 00171 #else 00172 #define U_DEF_ICUDATA_ENTRY_POINT(major, suff) icudt##suff ## major##_dat 00173 #endif 00174 #endif 00175 #endif /* U_HIDE_INTERNAL_API */ 00176 00182 #ifndef NULL 00183 #ifdef __cplusplus 00184 #define NULL 0 00185 #else 00186 #define NULL ((void *)0) 00187 #endif 00188 #endif 00189 00190 /*===========================================================================*/ 00191 /* Calendar/TimeZone data types */ 00192 /*===========================================================================*/ 00193 00201 typedef double UDate; 00202 00204 #define U_MILLIS_PER_SECOND (1000) 00205 00206 #define U_MILLIS_PER_MINUTE (60000) 00207 00208 #define U_MILLIS_PER_HOUR (3600000) 00209 00210 #define U_MILLIS_PER_DAY (86400000) 00211 00216 #define U_DATE_MAX DBL_MAX 00217 00222 #define U_DATE_MIN -U_DATE_MAX 00223 00224 /*===========================================================================*/ 00225 /* Shared library/DLL import-export API control */ 00226 /*===========================================================================*/ 00227 00228 /* 00229 * Control of symbol import/export. 00230 * ICU is separated into three libraries. 00231 */ 00232 00291 #if defined(U_COMBINED_IMPLEMENTATION) 00292 #define U_DATA_API U_EXPORT 00293 #define U_COMMON_API U_EXPORT 00294 #define U_I18N_API U_EXPORT 00295 #define U_LAYOUT_API U_EXPORT 00296 #define U_LAYOUTEX_API U_EXPORT 00297 #define U_IO_API U_EXPORT 00298 #define U_TOOLUTIL_API U_EXPORT 00299 #elif defined(U_STATIC_IMPLEMENTATION) 00300 #define U_DATA_API 00301 #define U_COMMON_API 00302 #define U_I18N_API 00303 #define U_LAYOUT_API 00304 #define U_LAYOUTEX_API 00305 #define U_IO_API 00306 #define U_TOOLUTIL_API 00307 #elif defined(U_COMMON_IMPLEMENTATION) 00308 #define U_DATA_API U_IMPORT 00309 #define U_COMMON_API U_EXPORT 00310 #define U_I18N_API U_IMPORT 00311 #define U_LAYOUT_API U_IMPORT 00312 #define U_LAYOUTEX_API U_IMPORT 00313 #define U_IO_API U_IMPORT 00314 #define U_TOOLUTIL_API U_IMPORT 00315 #elif defined(U_I18N_IMPLEMENTATION) 00316 #define U_DATA_API U_IMPORT 00317 #define U_COMMON_API U_IMPORT 00318 #define U_I18N_API U_EXPORT 00319 #define U_LAYOUT_API U_IMPORT 00320 #define U_LAYOUTEX_API U_IMPORT 00321 #define U_IO_API U_IMPORT 00322 #define U_TOOLUTIL_API U_IMPORT 00323 #elif defined(U_LAYOUT_IMPLEMENTATION) 00324 #define U_DATA_API U_IMPORT 00325 #define U_COMMON_API U_IMPORT 00326 #define U_I18N_API U_IMPORT 00327 #define U_LAYOUT_API U_EXPORT 00328 #define U_LAYOUTEX_API U_IMPORT 00329 #define U_IO_API U_IMPORT 00330 #define U_TOOLUTIL_API U_IMPORT 00331 #elif defined(U_LAYOUTEX_IMPLEMENTATION) 00332 #define U_DATA_API U_IMPORT 00333 #define U_COMMON_API U_IMPORT 00334 #define U_I18N_API U_IMPORT 00335 #define U_LAYOUT_API U_IMPORT 00336 #define U_LAYOUTEX_API U_EXPORT 00337 #define U_IO_API U_IMPORT 00338 #define U_TOOLUTIL_API U_IMPORT 00339 #elif defined(U_IO_IMPLEMENTATION) 00340 #define U_DATA_API U_IMPORT 00341 #define U_COMMON_API U_IMPORT 00342 #define U_I18N_API U_IMPORT 00343 #define U_LAYOUT_API U_IMPORT 00344 #define U_LAYOUTEX_API U_IMPORT 00345 #define U_IO_API U_EXPORT 00346 #define U_TOOLUTIL_API U_IMPORT 00347 #elif defined(U_TOOLUTIL_IMPLEMENTATION) 00348 #define U_DATA_API U_IMPORT 00349 #define U_COMMON_API U_IMPORT 00350 #define U_I18N_API U_IMPORT 00351 #define U_LAYOUT_API U_IMPORT 00352 #define U_LAYOUTEX_API U_IMPORT 00353 #define U_IO_API U_IMPORT 00354 #define U_TOOLUTIL_API U_EXPORT 00355 #else 00356 #define U_DATA_API U_IMPORT 00357 #define U_COMMON_API U_IMPORT 00358 #define U_I18N_API U_IMPORT 00359 #define U_LAYOUT_API U_IMPORT 00360 #define U_LAYOUTEX_API U_IMPORT 00361 #define U_IO_API U_IMPORT 00362 #define U_TOOLUTIL_API U_IMPORT 00363 #endif 00364 00370 #ifdef __cplusplus 00371 #define U_STANDARD_CPP_NAMESPACE :: 00372 #else 00373 #define U_STANDARD_CPP_NAMESPACE 00374 #endif 00375 00376 00377 /*===========================================================================*/ 00378 /* Global delete operator */ 00379 /*===========================================================================*/ 00380 00381 /* 00382 * The ICU4C library must not use the global new and delete operators. 00383 * These operators here are defined to enable testing for this. 00384 * See Jitterbug 2581 for details of why this is necessary. 00385 * 00386 * Verification that ICU4C's memory usage is correct, i.e., 00387 * that global new/delete are not used: 00388 * 00389 * a) Check for imports of global new/delete (see uobject.cpp for details) 00390 * b) Verify that new is never imported. 00391 * c) Verify that delete is only imported from object code for interface/mixin classes. 00392 * d) Add global delete and delete[] only for the ICU4C library itself 00393 * and define them in a way that crashes or otherwise easily shows a problem. 00394 * 00395 * The following implements d). 00396 * The operator implementations crash; this is intentional and used for library debugging. 00397 * 00398 * Note: This is currently only done on Windows because 00399 * some Linux/Unix compilers have problems with defining global new/delete. 00400 * On Windows, it is _MSC_VER>=1200 for MSVC 6.0 and higher. 00401 */ 00402 #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)) 00403 00404 #ifndef U_HIDE_INTERNAL_API 00405 00410 inline void * 00411 operator new(size_t /*size*/) { 00412 char *q=NULL; 00413 *q=5; /* break it */ 00414 return q; 00415 } 00416 00417 #ifdef _Ret_bytecap_ 00418 /* This is only needed to suppress a Visual C++ 2008 warning for operator new[]. */ 00419 _Ret_bytecap_(_Size) 00420 #endif 00421 00426 inline void * 00427 operator new[](size_t /*size*/) { 00428 char *q=NULL; 00429 *q=5; /* break it */ 00430 return q; 00431 } 00432 00438 inline void 00439 operator delete(void * /*p*/) { 00440 char *q=NULL; 00441 *q=5; /* break it */ 00442 } 00443 00449 inline void 00450 operator delete[](void * /*p*/) { 00451 char *q=NULL; 00452 *q=5; /* break it */ 00453 } 00454 00455 #endif /* U_HIDE_INTERNAL_API */ 00456 #endif 00457 00458 /*===========================================================================*/ 00459 /* UErrorCode */ 00460 /*===========================================================================*/ 00461 00476 typedef enum UErrorCode { 00477 /* The ordering of U_ERROR_INFO_START Vs U_USING_FALLBACK_WARNING looks weird 00478 * and is that way because VC++ debugger displays first encountered constant, 00479 * which is not the what the code is used for 00480 */ 00481 00482 U_USING_FALLBACK_WARNING = -128, 00484 U_ERROR_WARNING_START = -128, 00486 U_USING_DEFAULT_WARNING = -127, 00488 U_SAFECLONE_ALLOCATED_WARNING = -126, 00490 U_STATE_OLD_WARNING = -125, 00492 U_STRING_NOT_TERMINATED_WARNING = -124, 00494 U_SORT_KEY_TOO_SHORT_WARNING = -123, 00496 U_AMBIGUOUS_ALIAS_WARNING = -122, 00498 U_DIFFERENT_UCA_VERSION = -121, 00500 U_PLUGIN_CHANGED_LEVEL_WARNING = -120, 00502 U_ERROR_WARNING_LIMIT, 00505 U_ZERO_ERROR = 0, 00507 U_ILLEGAL_ARGUMENT_ERROR = 1, 00508 U_MISSING_RESOURCE_ERROR = 2, 00509 U_INVALID_FORMAT_ERROR = 3, 00510 U_FILE_ACCESS_ERROR = 4, 00511 U_INTERNAL_PROGRAM_ERROR = 5, 00512 U_MESSAGE_PARSE_ERROR = 6, 00513 U_MEMORY_ALLOCATION_ERROR = 7, 00514 U_INDEX_OUTOFBOUNDS_ERROR = 8, 00515 U_PARSE_ERROR = 9, 00516 U_INVALID_CHAR_FOUND = 10, 00517 U_TRUNCATED_CHAR_FOUND = 11, 00518 U_ILLEGAL_CHAR_FOUND = 12, 00519 U_INVALID_TABLE_FORMAT = 13, 00520 U_INVALID_TABLE_FILE = 14, 00521 U_BUFFER_OVERFLOW_ERROR = 15, 00522 U_UNSUPPORTED_ERROR = 16, 00523 U_RESOURCE_TYPE_MISMATCH = 17, 00524 U_ILLEGAL_ESCAPE_SEQUENCE = 18, 00525 U_UNSUPPORTED_ESCAPE_SEQUENCE = 19, 00526 U_NO_SPACE_AVAILABLE = 20, 00527 U_CE_NOT_FOUND_ERROR = 21, 00528 U_PRIMARY_TOO_LONG_ERROR = 22, 00529 U_STATE_TOO_OLD_ERROR = 23, 00530 U_TOO_MANY_ALIASES_ERROR = 24, 00532 U_ENUM_OUT_OF_SYNC_ERROR = 25, 00533 U_INVARIANT_CONVERSION_ERROR = 26, 00534 U_INVALID_STATE_ERROR = 27, 00535 U_COLLATOR_VERSION_MISMATCH = 28, 00536 U_USELESS_COLLATOR_ERROR = 29, 00537 U_NO_WRITE_PERMISSION = 30, 00539 U_STANDARD_ERROR_LIMIT, 00540 /* 00541 * the error code range 0x10000 0x10100 are reserved for Transliterator 00542 */ 00543 U_BAD_VARIABLE_DEFINITION=0x10000, 00544 U_PARSE_ERROR_START = 0x10000, 00545 U_MALFORMED_RULE, 00546 U_MALFORMED_SET, 00547 U_MALFORMED_SYMBOL_REFERENCE, 00548 U_MALFORMED_UNICODE_ESCAPE, 00549 U_MALFORMED_VARIABLE_DEFINITION, 00550 U_MALFORMED_VARIABLE_REFERENCE, 00551 U_MISMATCHED_SEGMENT_DELIMITERS, 00552 U_MISPLACED_ANCHOR_START, 00553 U_MISPLACED_CURSOR_OFFSET, 00554 U_MISPLACED_QUANTIFIER, 00555 U_MISSING_OPERATOR, 00556 U_MISSING_SEGMENT_CLOSE, 00557 U_MULTIPLE_ANTE_CONTEXTS, 00558 U_MULTIPLE_CURSORS, 00559 U_MULTIPLE_POST_CONTEXTS, 00560 U_TRAILING_BACKSLASH, 00561 U_UNDEFINED_SEGMENT_REFERENCE, 00562 U_UNDEFINED_VARIABLE, 00563 U_UNQUOTED_SPECIAL, 00564 U_UNTERMINATED_QUOTE, 00565 U_RULE_MASK_ERROR, 00566 U_MISPLACED_COMPOUND_FILTER, 00567 U_MULTIPLE_COMPOUND_FILTERS, 00568 U_INVALID_RBT_SYNTAX, 00569 U_INVALID_PROPERTY_PATTERN, 00570 U_MALFORMED_PRAGMA, 00571 U_UNCLOSED_SEGMENT, 00572 U_ILLEGAL_CHAR_IN_SEGMENT, 00573 U_VARIABLE_RANGE_EXHAUSTED, 00574 U_VARIABLE_RANGE_OVERLAP, 00575 U_ILLEGAL_CHARACTER, 00576 U_INTERNAL_TRANSLITERATOR_ERROR, 00577 U_INVALID_ID, 00578 U_INVALID_FUNCTION, 00579 U_PARSE_ERROR_LIMIT, 00581 /* 00582 * the error code range 0x10100 0x10200 are reserved for formatting API parsing error 00583 */ 00584 U_UNEXPECTED_TOKEN=0x10100, 00585 U_FMT_PARSE_ERROR_START=0x10100, 00586 U_MULTIPLE_DECIMAL_SEPARATORS, 00587 U_MULTIPLE_DECIMAL_SEPERATORS = U_MULTIPLE_DECIMAL_SEPARATORS, 00588 U_MULTIPLE_EXPONENTIAL_SYMBOLS, 00589 U_MALFORMED_EXPONENTIAL_PATTERN, 00590 U_MULTIPLE_PERCENT_SYMBOLS, 00591 U_MULTIPLE_PERMILL_SYMBOLS, 00592 U_MULTIPLE_PAD_SPECIFIERS, 00593 U_PATTERN_SYNTAX_ERROR, 00594 U_ILLEGAL_PAD_POSITION, 00595 U_UNMATCHED_BRACES, 00596 U_UNSUPPORTED_PROPERTY, 00597 U_UNSUPPORTED_ATTRIBUTE, 00598 U_ARGUMENT_TYPE_MISMATCH, 00599 U_DUPLICATE_KEYWORD, 00600 U_UNDEFINED_KEYWORD, 00601 U_DEFAULT_KEYWORD_MISSING, 00602 U_DECIMAL_NUMBER_SYNTAX_ERROR, 00603 U_FORMAT_INEXACT_ERROR, 00604 U_FMT_PARSE_ERROR_LIMIT, 00606 /* 00607 * the error code range 0x10200 0x102ff are reserved for Break Iterator related error 00608 */ 00609 U_BRK_INTERNAL_ERROR=0x10200, 00610 U_BRK_ERROR_START=0x10200, 00611 U_BRK_HEX_DIGITS_EXPECTED, 00612 U_BRK_SEMICOLON_EXPECTED, 00613 U_BRK_RULE_SYNTAX, 00614 U_BRK_UNCLOSED_SET, 00615 U_BRK_ASSIGN_ERROR, 00616 U_BRK_VARIABLE_REDFINITION, 00617 U_BRK_MISMATCHED_PAREN, 00618 U_BRK_NEW_LINE_IN_QUOTED_STRING, 00619 U_BRK_UNDEFINED_VARIABLE, 00620 U_BRK_INIT_ERROR, 00621 U_BRK_RULE_EMPTY_SET, 00622 U_BRK_UNRECOGNIZED_OPTION, 00623 U_BRK_MALFORMED_RULE_TAG, 00624 U_BRK_ERROR_LIMIT, 00626 /* 00627 * The error codes in the range 0x10300-0x103ff are reserved for regular expression related errrs 00628 */ 00629 U_REGEX_INTERNAL_ERROR=0x10300, 00630 U_REGEX_ERROR_START=0x10300, 00631 U_REGEX_RULE_SYNTAX, 00632 U_REGEX_INVALID_STATE, 00633 U_REGEX_BAD_ESCAPE_SEQUENCE, 00634 U_REGEX_PROPERTY_SYNTAX, 00635 U_REGEX_UNIMPLEMENTED, 00636 U_REGEX_MISMATCHED_PAREN, 00637 U_REGEX_NUMBER_TOO_BIG, 00638 U_REGEX_BAD_INTERVAL, 00639 U_REGEX_MAX_LT_MIN, 00640 U_REGEX_INVALID_BACK_REF, 00641 U_REGEX_INVALID_FLAG, 00642 U_REGEX_LOOK_BEHIND_LIMIT, 00643 U_REGEX_SET_CONTAINS_STRING, 00644 U_REGEX_OCTAL_TOO_BIG, 00645 U_REGEX_MISSING_CLOSE_BRACKET, 00646 U_REGEX_INVALID_RANGE, 00647 U_REGEX_STACK_OVERFLOW, 00648 U_REGEX_TIME_OUT, 00649 U_REGEX_STOPPED_BY_CALLER, 00650 U_REGEX_ERROR_LIMIT, 00652 /* 00653 * The error code in the range 0x10400-0x104ff are reserved for IDNA related error codes 00654 */ 00655 U_IDNA_PROHIBITED_ERROR=0x10400, 00656 U_IDNA_ERROR_START=0x10400, 00657 U_IDNA_UNASSIGNED_ERROR, 00658 U_IDNA_CHECK_BIDI_ERROR, 00659 U_IDNA_STD3_ASCII_RULES_ERROR, 00660 U_IDNA_ACE_PREFIX_ERROR, 00661 U_IDNA_VERIFICATION_ERROR, 00662 U_IDNA_LABEL_TOO_LONG_ERROR, 00663 U_IDNA_ZERO_LENGTH_LABEL_ERROR, 00664 U_IDNA_DOMAIN_NAME_TOO_LONG_ERROR, 00665 U_IDNA_ERROR_LIMIT, 00666 /* 00667 * Aliases for StringPrep 00668 */ 00669 U_STRINGPREP_PROHIBITED_ERROR = U_IDNA_PROHIBITED_ERROR, 00670 U_STRINGPREP_UNASSIGNED_ERROR = U_IDNA_UNASSIGNED_ERROR, 00671 U_STRINGPREP_CHECK_BIDI_ERROR = U_IDNA_CHECK_BIDI_ERROR, 00672 00673 /* 00674 * The error code in the range 0x10500-0x105ff are reserved for Plugin related error codes 00675 */ 00676 U_PLUGIN_ERROR_START=0x10500, 00677 U_PLUGIN_TOO_HIGH=0x10500, 00678 U_PLUGIN_DIDNT_SET_LEVEL, 00679 U_PLUGIN_ERROR_LIMIT, 00681 U_ERROR_LIMIT=U_PLUGIN_ERROR_LIMIT 00682 } UErrorCode; 00683 00684 /* Use the following to determine if an UErrorCode represents */ 00685 /* operational success or failure. */ 00686 00687 #ifdef __cplusplus 00688 00692 static 00693 inline UBool U_SUCCESS(UErrorCode code) { return (UBool)(code<=U_ZERO_ERROR); } 00698 static 00699 inline UBool U_FAILURE(UErrorCode code) { return (UBool)(code>U_ZERO_ERROR); } 00700 #else 00701 00705 # define U_SUCCESS(x) ((x)<=U_ZERO_ERROR) 00706 00710 # define U_FAILURE(x) ((x)>U_ZERO_ERROR) 00711 #endif 00712 00719 U_STABLE const char * U_EXPORT2 00720 u_errorName(UErrorCode code); 00721 00722 00723 #endif /* _UTYPES */