intl/icu/source/common/unicode/umachine.h

Wed, 31 Dec 2014 07:22:50 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 07:22:50 +0100
branch
TOR_BUG_3246
changeset 4
fc2d59ddac77
permissions
-rw-r--r--

Correct previous dual key logic pending first delivery installment.

     1 /*
     2 ******************************************************************************
     3 *
     4 *   Copyright (C) 1999-2012, International Business Machines
     5 *   Corporation and others.  All Rights Reserved.
     6 *
     7 ******************************************************************************
     8 *   file name:  umachine.h
     9 *   encoding:   US-ASCII
    10 *   tab size:   8 (not used)
    11 *   indentation:4
    12 *
    13 *   created on: 1999sep13
    14 *   created by: Markus W. Scherer
    15 *
    16 *   This file defines basic types and constants for utf.h to be
    17 *   platform-independent. umachine.h and utf.h are included into
    18 *   utypes.h to provide all the general definitions for ICU.
    19 *   All of these definitions used to be in utypes.h before
    20 *   the UTF-handling macros made this unmaintainable.
    21 */
    23 #ifndef __UMACHINE_H__
    24 #define __UMACHINE_H__
    27 /**
    28  * \file
    29  * \brief Basic types and constants for UTF
    30  *
    31  * <h2> Basic types and constants for UTF </h2>
    32  *   This file defines basic types and constants for utf.h to be
    33  *   platform-independent. umachine.h and utf.h are included into
    34  *   utypes.h to provide all the general definitions for ICU.
    35  *   All of these definitions used to be in utypes.h before
    36  *   the UTF-handling macros made this unmaintainable.
    37  *
    38  */
    39 /*==========================================================================*/
    40 /* Include platform-dependent definitions                                   */
    41 /* which are contained in the platform-specific file platform.h             */
    42 /*==========================================================================*/
    44 #include "unicode/ptypes.h" /* platform.h is included in ptypes.h */
    46 /*
    47  * ANSI C headers:
    48  * stddef.h defines wchar_t
    49  */
    50 #include <stddef.h>
    52 /*==========================================================================*/
    53 /* For C wrappers, we use the symbol U_STABLE.                                */
    54 /* This works properly if the includer is C or C++.                         */
    55 /* Functions are declared   U_STABLE return-type U_EXPORT2 function-name()... */
    56 /*==========================================================================*/
    58 /**
    59  * \def U_CFUNC
    60  * This is used in a declaration of a library private ICU C function.
    61  * @stable ICU 2.4
    62  */
    64 /**
    65  * \def U_CDECL_BEGIN
    66  * This is used to begin a declaration of a library private ICU C API.
    67  * @stable ICU 2.4
    68  */
    70 /**
    71  * \def U_CDECL_END
    72  * This is used to end a declaration of a library private ICU C API
    73  * @stable ICU 2.4
    74  */
    76 #ifdef __cplusplus
    77 #   define U_CFUNC extern "C"
    78 #   define U_CDECL_BEGIN extern "C" {
    79 #   define U_CDECL_END   }
    80 #else
    81 #   define U_CFUNC extern
    82 #   define U_CDECL_BEGIN
    83 #   define U_CDECL_END
    84 #endif
    86 #ifndef U_ATTRIBUTE_DEPRECATED
    87 /**
    88  * \def U_ATTRIBUTE_DEPRECATED
    89  *  This is used for GCC specific attributes
    90  * @internal
    91  */
    92 #if U_GCC_MAJOR_MINOR >= 302
    93 #    define U_ATTRIBUTE_DEPRECATED __attribute__ ((deprecated))
    94 /**
    95  * \def U_ATTRIBUTE_DEPRECATED
    96  * This is used for Visual C++ specific attributes 
    97  * @internal
    98  */
    99 #elif defined(_MSC_VER) && (_MSC_VER >= 1400)
   100 #    define U_ATTRIBUTE_DEPRECATED __declspec(deprecated)
   101 #else
   102 #    define U_ATTRIBUTE_DEPRECATED
   103 #endif
   104 #endif
   106 /** This is used to declare a function as a public ICU C API @stable ICU 2.0*/
   107 #define U_CAPI U_CFUNC U_EXPORT
   108 /** This is used to declare a function as a stable public ICU C API*/
   109 #define U_STABLE U_CAPI
   110 /** This is used to declare a function as a draft public ICU C API  */
   111 #define U_DRAFT  U_CAPI
   112 /** This is used to declare a function as a deprecated public ICU C API  */
   113 #define U_DEPRECATED U_CAPI U_ATTRIBUTE_DEPRECATED
   114 /** This is used to declare a function as an obsolete public ICU C API  */
   115 #define U_OBSOLETE U_CAPI
   116 /** This is used to declare a function as an internal ICU C API  */
   117 #define U_INTERNAL U_CAPI
   119 /*==========================================================================*/
   120 /* limits for int32_t etc., like in POSIX inttypes.h                        */
   121 /*==========================================================================*/
   123 #ifndef INT8_MIN
   124 /** The smallest value an 8 bit signed integer can hold @stable ICU 2.0 */
   125 #   define INT8_MIN        ((int8_t)(-128))
   126 #endif
   127 #ifndef INT16_MIN
   128 /** The smallest value a 16 bit signed integer can hold @stable ICU 2.0 */
   129 #   define INT16_MIN       ((int16_t)(-32767-1))
   130 #endif
   131 #ifndef INT32_MIN
   132 /** The smallest value a 32 bit signed integer can hold @stable ICU 2.0 */
   133 #   define INT32_MIN       ((int32_t)(-2147483647-1))
   134 #endif
   136 #ifndef INT8_MAX
   137 /** The largest value an 8 bit signed integer can hold @stable ICU 2.0 */
   138 #   define INT8_MAX        ((int8_t)(127))
   139 #endif
   140 #ifndef INT16_MAX
   141 /** The largest value a 16 bit signed integer can hold @stable ICU 2.0 */
   142 #   define INT16_MAX       ((int16_t)(32767))
   143 #endif
   144 #ifndef INT32_MAX
   145 /** The largest value a 32 bit signed integer can hold @stable ICU 2.0 */
   146 #   define INT32_MAX       ((int32_t)(2147483647))
   147 #endif
   149 #ifndef UINT8_MAX
   150 /** The largest value an 8 bit unsigned integer can hold @stable ICU 2.0 */
   151 #   define UINT8_MAX       ((uint8_t)(255U))
   152 #endif
   153 #ifndef UINT16_MAX
   154 /** The largest value a 16 bit unsigned integer can hold @stable ICU 2.0 */
   155 #   define UINT16_MAX      ((uint16_t)(65535U))
   156 #endif
   157 #ifndef UINT32_MAX
   158 /** The largest value a 32 bit unsigned integer can hold @stable ICU 2.0 */
   159 #   define UINT32_MAX      ((uint32_t)(4294967295U))
   160 #endif
   162 #if defined(U_INT64_T_UNAVAILABLE)
   163 # error int64_t is required for decimal format and rule-based number format.
   164 #else
   165 # ifndef INT64_C
   166 /**
   167  * Provides a platform independent way to specify a signed 64-bit integer constant.
   168  * note: may be wrong for some 64 bit platforms - ensure your compiler provides INT64_C
   169  * @stable ICU 2.8
   170  */
   171 #   define INT64_C(c) c ## LL
   172 # endif
   173 # ifndef UINT64_C
   174 /**
   175  * Provides a platform independent way to specify an unsigned 64-bit integer constant.
   176  * note: may be wrong for some 64 bit platforms - ensure your compiler provides UINT64_C
   177  * @stable ICU 2.8
   178  */
   179 #   define UINT64_C(c) c ## ULL
   180 # endif
   181 # ifndef U_INT64_MIN
   182 /** The smallest value a 64 bit signed integer can hold @stable ICU 2.8 */
   183 #     define U_INT64_MIN       ((int64_t)(INT64_C(-9223372036854775807)-1))
   184 # endif
   185 # ifndef U_INT64_MAX
   186 /** The largest value a 64 bit signed integer can hold @stable ICU 2.8 */
   187 #     define U_INT64_MAX       ((int64_t)(INT64_C(9223372036854775807)))
   188 # endif
   189 # ifndef U_UINT64_MAX
   190 /** The largest value a 64 bit unsigned integer can hold @stable ICU 2.8 */
   191 #     define U_UINT64_MAX      ((uint64_t)(UINT64_C(18446744073709551615)))
   192 # endif
   193 #endif
   195 /*==========================================================================*/
   196 /* Boolean data type                                                        */
   197 /*==========================================================================*/
   199 /** The ICU boolean type @stable ICU 2.0 */
   200 typedef int8_t UBool;
   202 #ifndef TRUE
   203 /** The TRUE value of a UBool @stable ICU 2.0 */
   204 #   define TRUE  1
   205 #endif
   206 #ifndef FALSE
   207 /** The FALSE value of a UBool @stable ICU 2.0 */
   208 #   define FALSE 0
   209 #endif
   212 /*==========================================================================*/
   213 /* Unicode data types                                                       */
   214 /*==========================================================================*/
   216 /* wchar_t-related definitions -------------------------------------------- */
   218 /*
   219  * \def U_WCHAR_IS_UTF16
   220  * Defined if wchar_t uses UTF-16.
   221  *
   222  * @stable ICU 2.0
   223  */
   224 /*
   225  * \def U_WCHAR_IS_UTF32
   226  * Defined if wchar_t uses UTF-32.
   227  *
   228  * @stable ICU 2.0
   229  */
   230 #if !defined(U_WCHAR_IS_UTF16) && !defined(U_WCHAR_IS_UTF32)
   231 #   ifdef __STDC_ISO_10646__
   232 #       if (U_SIZEOF_WCHAR_T==2)
   233 #           define U_WCHAR_IS_UTF16
   234 #       elif (U_SIZEOF_WCHAR_T==4)
   235 #           define  U_WCHAR_IS_UTF32
   236 #       endif
   237 #   elif defined __UCS2__
   238 #       if (U_PF_OS390 <= U_PLATFORM && U_PLATFORM <= U_PF_OS400) && (U_SIZEOF_WCHAR_T==2)
   239 #           define U_WCHAR_IS_UTF16
   240 #       endif
   241 #   elif defined(__UCS4__) || (U_PLATFORM == U_PF_OS400 && defined(__UTF32__))
   242 #       if (U_SIZEOF_WCHAR_T==4)
   243 #           define U_WCHAR_IS_UTF32
   244 #       endif
   245 #   elif U_PLATFORM_IS_DARWIN_BASED || (U_SIZEOF_WCHAR_T==4 && U_PLATFORM_IS_LINUX_BASED)
   246 #       define U_WCHAR_IS_UTF32
   247 #   elif U_PLATFORM_HAS_WIN32_API
   248 #       define U_WCHAR_IS_UTF16
   249 #   endif
   250 #endif
   252 /* UChar and UChar32 definitions -------------------------------------------- */
   254 /** Number of bytes in a UChar. @stable ICU 2.0 */
   255 #define U_SIZEOF_UCHAR 2
   257 /**
   258  * \var UChar
   259  * Define UChar to be UCHAR_TYPE, if that is #defined (for example, to char16_t),
   260  * or wchar_t if that is 16 bits wide; always assumed to be unsigned.
   261  * If neither is available, then define UChar to be uint16_t.
   262  *
   263  * This makes the definition of UChar platform-dependent
   264  * but allows direct string type compatibility with platforms with
   265  * 16-bit wchar_t types.
   266  *
   267  * @stable ICU 4.4
   268  */
   269 #if defined(UCHAR_TYPE)
   270     typedef UCHAR_TYPE UChar;
   271 /* Not #elif U_HAVE_CHAR16_T -- because that is type-incompatible with pre-C++11 callers
   272     typedef char16_t UChar;  */
   273 #elif U_SIZEOF_WCHAR_T==2
   274     typedef wchar_t UChar;
   275 #elif defined(__CHAR16_TYPE__)
   276     typedef __CHAR16_TYPE__ UChar;
   277 #else
   278     typedef uint16_t UChar;
   279 #endif
   281 /**
   282  * Define UChar32 as a type for single Unicode code points.
   283  * UChar32 is a signed 32-bit integer (same as int32_t).
   284  *
   285  * The Unicode code point range is 0..0x10ffff.
   286  * All other values (negative or >=0x110000) are illegal as Unicode code points.
   287  * They may be used as sentinel values to indicate "done", "error"
   288  * or similar non-code point conditions.
   289  *
   290  * Before ICU 2.4 (Jitterbug 2146), UChar32 was defined
   291  * to be wchar_t if that is 32 bits wide (wchar_t may be signed or unsigned)
   292  * or else to be uint32_t.
   293  * That is, the definition of UChar32 was platform-dependent.
   294  *
   295  * @see U_SENTINEL
   296  * @stable ICU 2.4
   297  */
   298 typedef int32_t UChar32;
   300 /**
   301  * This value is intended for sentinel values for APIs that
   302  * (take or) return single code points (UChar32).
   303  * It is outside of the Unicode code point range 0..0x10ffff.
   304  * 
   305  * For example, a "done" or "error" value in a new API
   306  * could be indicated with U_SENTINEL.
   307  *
   308  * ICU APIs designed before ICU 2.4 usually define service-specific "done"
   309  * values, mostly 0xffff.
   310  * Those may need to be distinguished from
   311  * actual U+ffff text contents by calling functions like
   312  * CharacterIterator::hasNext() or UnicodeString::length().
   313  *
   314  * @return -1
   315  * @see UChar32
   316  * @stable ICU 2.4
   317  */
   318 #define U_SENTINEL (-1)
   320 #include "unicode/urename.h"
   322 #endif

mercurial