webengine/osswebengine/WebKit/icu/unicode/umachine.h
changeset 0 dd21522fd290
equal deleted inserted replaced
-1:000000000000 0:dd21522fd290
       
     1 /*
       
     2 ******************************************************************************
       
     3 *
       
     4 *   Copyright (C) 1999-2004, 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 */
       
    22 
       
    23 #ifndef __UMACHINE_H__
       
    24 #define __UMACHINE_H__
       
    25 
       
    26 
       
    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 /*==========================================================================*/
       
    43 
       
    44 #if defined(WIN32) || defined(_WIN32) || defined(WIN64) || defined(_WIN64)
       
    45 #   include "unicode/pwin32.h"
       
    46 #else
       
    47 #   include "unicode/platform.h"
       
    48 #endif
       
    49 
       
    50 /*
       
    51  * ANSI C headers:
       
    52  * stddef.h defines wchar_t
       
    53  */
       
    54 #include <stddef.h>
       
    55 
       
    56 /*==========================================================================*/
       
    57 /* XP_CPLUSPLUS is a cross-platform symbol which should be defined when     */
       
    58 /* using C++.  It should not be defined when compiling under C.             */
       
    59 /*==========================================================================*/
       
    60 
       
    61 #ifdef __cplusplus
       
    62 #   ifndef XP_CPLUSPLUS
       
    63 #       define XP_CPLUSPLUS
       
    64 #   endif
       
    65 #else
       
    66 #   undef XP_CPLUSPLUS
       
    67 #endif
       
    68 
       
    69 /*==========================================================================*/
       
    70 /* For C wrappers, we use the symbol U_STABLE.                                */
       
    71 /* This works properly if the includer is C or C++.                         */
       
    72 /* Functions are declared   U_STABLE return-type U_EXPORT2 function-name()... */
       
    73 /*==========================================================================*/
       
    74 
       
    75 /**
       
    76  * \def U_CFUNC
       
    77  * This is used in a declaration of a library private ICU C function.
       
    78  * @stable ICU 2.4
       
    79  */
       
    80 
       
    81 /**
       
    82  * \def U_CDECL_BEGIN
       
    83  * This is used to begin a declaration of a library private ICU C API.
       
    84  * @stable ICU 2.4
       
    85  */
       
    86 
       
    87 /**
       
    88  * \def U_CDECL_END
       
    89  * This is used to end a declaration of a library private ICU C API 
       
    90  * @stable ICU 2.4
       
    91  */
       
    92 
       
    93 #ifdef XP_CPLUSPLUS
       
    94 #   define U_CFUNC extern "C"
       
    95 #   define U_CDECL_BEGIN extern "C" {
       
    96 #   define U_CDECL_END   }
       
    97 #else
       
    98 #   define U_CFUNC extern
       
    99 #   define U_CDECL_BEGIN
       
   100 #   define U_CDECL_END
       
   101 #endif
       
   102 
       
   103 /**
       
   104  * \def U_NAMESPACE_BEGIN
       
   105  * This is used to begin a declaration of a public ICU C++ API.
       
   106  * If the compiler doesn't support namespaces, this does nothing.
       
   107  * @stable ICU 2.4
       
   108  */
       
   109 
       
   110 /**
       
   111  * \def U_NAMESPACE_END
       
   112  * This is used to end a declaration of a public ICU C++ API 
       
   113  * If the compiler doesn't support namespaces, this does nothing.
       
   114  * @stable ICU 2.4
       
   115  */
       
   116 
       
   117 /**
       
   118  * \def U_NAMESPACE_USE
       
   119  * This is used to specify that the rest of the code uses the
       
   120  * public ICU C++ API namespace.
       
   121  * If the compiler doesn't support namespaces, this does nothing.
       
   122  * @stable ICU 2.4
       
   123  */
       
   124 
       
   125 /**
       
   126  * \def U_NAMESPACE_QUALIFIER
       
   127  * This is used to qualify that a function or class is part of
       
   128  * the public ICU C++ API namespace.
       
   129  * If the compiler doesn't support namespaces, this does nothing.
       
   130  * @stable ICU 2.4
       
   131  */
       
   132 
       
   133 /* Define namespace symbols if the compiler supports it. */
       
   134 #if U_HAVE_NAMESPACE
       
   135 #   define U_NAMESPACE_BEGIN namespace U_ICU_NAMESPACE {
       
   136 #   define U_NAMESPACE_END  }
       
   137 #   define U_NAMESPACE_USE using namespace U_ICU_NAMESPACE;
       
   138 #   define U_NAMESPACE_QUALIFIER U_ICU_NAMESPACE::
       
   139 #else
       
   140 #   define U_NAMESPACE_BEGIN
       
   141 #   define U_NAMESPACE_END
       
   142 #   define U_NAMESPACE_USE
       
   143 #   define U_NAMESPACE_QUALIFIER
       
   144 #endif
       
   145 
       
   146 /** This is used to declare a function as a public ICU C API @stable ICU 2.0*/
       
   147 #define U_CAPI U_CFUNC U_EXPORT
       
   148 #define U_STABLE U_CAPI
       
   149 #define U_DRAFT  U_CAPI
       
   150 #define U_DEPRECATED U_CAPI
       
   151 #define U_OBSOLETE U_CAPI
       
   152 #define U_INTERNAL U_CAPI
       
   153 
       
   154 /*==========================================================================*/
       
   155 /* limits for int32_t etc., like in POSIX inttypes.h                        */
       
   156 /*==========================================================================*/
       
   157 
       
   158 #ifndef INT8_MIN
       
   159 /** The smallest value an 8 bit signed integer can hold @stable ICU 2.0 */
       
   160 #   define INT8_MIN        ((int8_t)(-128))
       
   161 #endif
       
   162 #ifndef INT16_MIN
       
   163 /** The smallest value a 16 bit signed integer can hold @stable ICU 2.0 */
       
   164 #   define INT16_MIN       ((int16_t)(-32767-1))
       
   165 #endif
       
   166 #ifndef INT32_MIN
       
   167 /** The smallest value a 32 bit signed integer can hold @stable ICU 2.0 */
       
   168 #   define INT32_MIN       ((int32_t)(-2147483647-1))
       
   169 #endif
       
   170 
       
   171 #ifndef INT8_MAX
       
   172 /** The largest value an 8 bit signed integer can hold @stable ICU 2.0 */
       
   173 #   define INT8_MAX        ((int8_t)(127))
       
   174 #endif
       
   175 #ifndef INT16_MAX
       
   176 /** The largest value a 16 bit signed integer can hold @stable ICU 2.0 */
       
   177 #   define INT16_MAX       ((int16_t)(32767))
       
   178 #endif
       
   179 #ifndef INT32_MAX
       
   180 /** The largest value a 32 bit signed integer can hold @stable ICU 2.0 */
       
   181 #   define INT32_MAX       ((int32_t)(2147483647))
       
   182 #endif
       
   183 
       
   184 #ifndef UINT8_MAX
       
   185 /** The largest value an 8 bit unsigned integer can hold @stable ICU 2.0 */
       
   186 #   define UINT8_MAX       ((uint8_t)(255U))
       
   187 #endif
       
   188 #ifndef UINT16_MAX
       
   189 /** The largest value a 16 bit unsigned integer can hold @stable ICU 2.0 */
       
   190 #   define UINT16_MAX      ((uint16_t)(65535U))
       
   191 #endif
       
   192 #ifndef UINT32_MAX
       
   193 /** The largest value a 32 bit unsigned integer can hold @stable ICU 2.0 */
       
   194 #   define UINT32_MAX      ((uint32_t)(4294967295U))
       
   195 #endif
       
   196 
       
   197 #if defined(U_INT64_T_UNAVAILABLE)
       
   198 # error int64_t is required for decimal format and rule-based number format.
       
   199 #else
       
   200 # ifndef INT64_C
       
   201 /**
       
   202  * Provides a platform independent way to specify a signed 64-bit integer constant.
       
   203  * note: may be wrong for some 64 bit platforms - ensure your compiler provides INT64_C
       
   204  * @draft ICU 2.8
       
   205  */
       
   206 #   define INT64_C(c) c ## LL
       
   207 # endif
       
   208 # ifndef UINT64_C
       
   209 /**
       
   210  * Provides a platform independent way to specify an unsigned 64-bit integer constant.
       
   211  * note: may be wrong for some 64 bit platforms - ensure your compiler provides UINT64_C
       
   212  * @draft ICU 2.8
       
   213  */
       
   214 #   define UINT64_C(c) c ## ULL
       
   215 # endif
       
   216 # ifndef U_INT64_MIN
       
   217 /** The smallest value a 64 bit signed integer can hold @stable ICU 2.8 */
       
   218 #     define U_INT64_MIN       ((int64_t)(INT64_C(-9223372036854775807)-1))
       
   219 # endif
       
   220 # ifndef U_INT64_MAX
       
   221 /** The largest value a 64 bit signed integer can hold @stable ICU 2.8 */
       
   222 #     define U_INT64_MAX       ((int64_t)(INT64_C(9223372036854775807)))
       
   223 # endif
       
   224 # ifndef U_UINT64_MAX
       
   225 /** The largest value a 64 bit unsigned integer can hold @stable ICU 2.8 */
       
   226 #     define U_UINT64_MAX      ((uint64_t)(UINT64_C(18446744073709551615)))
       
   227 # endif
       
   228 #endif
       
   229 
       
   230 /*==========================================================================*/
       
   231 /* Boolean data type                                                        */
       
   232 /*==========================================================================*/
       
   233 
       
   234 /** The ICU boolean type @stable ICU 2.0 */
       
   235 typedef int8_t UBool;
       
   236 
       
   237 #ifndef TRUE
       
   238 /** The TRUE value of a UBool @stable ICU 2.0 */
       
   239 #   define TRUE  1
       
   240 #endif
       
   241 #ifndef FALSE
       
   242 /** The FALSE value of a UBool @stable ICU 2.0 */
       
   243 #   define FALSE 0
       
   244 #endif
       
   245 
       
   246 
       
   247 /*==========================================================================*/
       
   248 /* Unicode data types                                                       */
       
   249 /*==========================================================================*/
       
   250 
       
   251 /* wchar_t-related definitions -------------------------------------------- */
       
   252 
       
   253 /**
       
   254  * \def U_HAVE_WCHAR_H
       
   255  * Indicates whether <wchar.h> is available (1) or not (0). Set to 1 by default.
       
   256  *
       
   257  * @stable ICU 2.0
       
   258  */
       
   259 #ifndef U_HAVE_WCHAR_H
       
   260 #   define U_HAVE_WCHAR_H 1
       
   261 #endif
       
   262 
       
   263 /**
       
   264  * \def U_SIZEOF_WCHAR_T
       
   265  * U_SIZEOF_WCHAR_T==sizeof(wchar_t) (0 means it is not defined or autoconf could not set it)
       
   266  *
       
   267  * @stable ICU 2.0
       
   268  */
       
   269 #if U_SIZEOF_WCHAR_T==0
       
   270 #   undef U_SIZEOF_WCHAR_T
       
   271 #   define U_SIZEOF_WCHAR_T 4
       
   272 #endif
       
   273 
       
   274 /*
       
   275  * \def U_WCHAR_IS_UTF16
       
   276  * Defined if wchar_t uses UTF-16.
       
   277  *
       
   278  * @stable ICU 2.0
       
   279  */
       
   280 /*
       
   281  * \def U_WCHAR_IS_UTF32
       
   282  * Defined if wchar_t uses UTF-32.
       
   283  *
       
   284  * @stable ICU 2.0
       
   285  */
       
   286 #if !defined(U_WCHAR_IS_UTF16) && !defined(U_WCHAR_IS_UTF32)
       
   287 #   ifdef __STDC_ISO_10646__ 
       
   288 #       if (U_SIZEOF_WCHAR_T==2)
       
   289 #           define U_WCHAR_IS_UTF16
       
   290 #       elif (U_SIZEOF_WCHAR_T==4)
       
   291 #           define  U_WCHAR_IS_UTF32
       
   292 #       endif
       
   293 #   elif defined __UCS2__
       
   294 #       if (__OS390__ || __OS400__) && (U_SIZEOF_WCHAR_T==2)
       
   295 #           define U_WCHAR_IS_UTF16
       
   296 #       endif
       
   297 #   elif defined __UCS4__
       
   298 #       if (U_SIZEOF_WCHAR_T==4)
       
   299 #           define U_WCHAR_IS_UTF32
       
   300 #       endif
       
   301 #   elif defined(WIN32) || defined(_WIN32) || defined(WIN64) || defined(_WIN64)
       
   302 #       define U_WCHAR_IS_UTF16    
       
   303 #   endif
       
   304 #endif
       
   305 
       
   306 /* UChar and UChar32 definitions -------------------------------------------- */
       
   307 
       
   308 /** Number of bytes in a UChar. @stable ICU 2.0 */
       
   309 #define U_SIZEOF_UCHAR 2
       
   310 
       
   311 /**
       
   312  * \var UChar
       
   313  * Define UChar to be wchar_t if that is 16 bits wide; always assumed to be unsigned.
       
   314  * If wchar_t is not 16 bits wide, then define UChar to be uint16_t.
       
   315  * This makes the definition of UChar platform-dependent
       
   316  * but allows direct string type compatibility with platforms with
       
   317  * 16-bit wchar_t types.
       
   318  *
       
   319  * @stable ICU 2.0
       
   320  */
       
   321 
       
   322 /* Define UChar to be compatible with wchar_t if possible. */
       
   323 #if U_SIZEOF_WCHAR_T==2
       
   324     typedef wchar_t UChar;
       
   325 #else
       
   326     typedef uint16_t UChar;
       
   327 #endif
       
   328 
       
   329 /**
       
   330  * Define UChar32 as a type for single Unicode code points.
       
   331  * UChar32 is a signed 32-bit integer (same as int32_t).
       
   332  *
       
   333  * The Unicode code point range is 0..0x10ffff.
       
   334  * All other values (negative or >=0x110000) are illegal as Unicode code points.
       
   335  * They may be used as sentinel values to indicate "done", "error"
       
   336  * or similar non-code point conditions.
       
   337  *
       
   338  * Before ICU 2.4 (Jitterbug 2146), UChar32 was defined
       
   339  * to be wchar_t if that is 32 bits wide (wchar_t may be signed or unsigned)
       
   340  * or else to be uint32_t.
       
   341  * That is, the definition of UChar32 was platform-dependent.
       
   342  *
       
   343  * @see U_SENTINEL
       
   344  * @stable ICU 2.4
       
   345  */
       
   346 typedef int32_t UChar32;
       
   347 
       
   348 /*==========================================================================*/
       
   349 /* U_INLINE and U_ALIGN_CODE   Set default values if these are not already  */
       
   350 /*                             defined.  Definitions normally are in        */
       
   351 /*                             platform.h or the corresponding file for     */
       
   352 /*                             the OS in use.                               */
       
   353 /*==========================================================================*/
       
   354 
       
   355 /**
       
   356  * \def U_ALIGN_CODE
       
   357  * This is used to align code fragments to a specific byte boundary.
       
   358  * This is useful for getting consistent performance test results.
       
   359  * @internal
       
   360  */
       
   361 #ifndef U_ALIGN_CODE
       
   362 #   define U_ALIGN_CODE(n)
       
   363 #endif
       
   364 
       
   365 #ifndef U_INLINE
       
   366 #   define U_INLINE
       
   367 #endif
       
   368 
       
   369 #include "unicode/urename.h"
       
   370 
       
   371 #endif