00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef _PLATFORM_H
00020 #define _PLATFORM_H
00021
00022 #include "unicode/uconfig.h"
00023 #include "unicode/uvernum.h"
00024
00057 #ifdef U_IN_DOXYGEN
00058
00059
00060
00061
00062
00063
00064 #endif
00065
00087 #define U_PF_UNKNOWN 0
00088
00089 #define U_PF_WINDOWS 1000
00090
00091 #define U_PF_MINGW 1800
00092
00097 #define U_PF_CYGWIN 1900
00098
00100 #define U_PF_HPUX 2100
00101
00102 #define U_PF_SOLARIS 2600
00103
00104 #define U_PF_BSD 3000
00105
00106 #define U_PF_AIX 3100
00107
00108 #define U_PF_IRIX 3200
00109
00117 #define U_PF_DARWIN 3500
00118
00119 #define U_PF_IPHONE 3550
00120
00121 #define U_PF_QNX 3700
00122
00123 #define U_PF_LINUX 4000
00124
00130 #define U_PF_BROWSER_NATIVE_CLIENT 4020
00131
00132 #define U_PF_ANDROID 4050
00133
00135 #define U_PF_OS390 9000
00136
00137 #define U_PF_OS400 9400
00138
00139 #ifdef U_PLATFORM
00140
00141 #elif defined(__MINGW32__)
00142 # define U_PLATFORM U_PF_MINGW
00143 #elif defined(__CYGWIN__)
00144 # define U_PLATFORM U_PF_CYGWIN
00145 #elif defined(WIN32) || defined(_WIN32) || defined(WIN64) || defined(_WIN64)
00146 # define U_PLATFORM U_PF_WINDOWS
00147 #elif defined(__ANDROID__)
00148 # define U_PLATFORM U_PF_ANDROID
00149
00150 # include <android/api-level.h>
00151 #elif defined(__native_client__)
00152 # define U_PLATFORM U_PF_BROWSER_NATIVE_CLIENT
00153 #elif defined(linux) || defined(__linux__) || defined(__linux)
00154 # define U_PLATFORM U_PF_LINUX
00155 #elif defined(__APPLE__) && defined(__MACH__)
00156 # include <TargetConditionals.h>
00157 # if defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE
00158 # define U_PLATFORM U_PF_IPHONE
00159 # else
00160 # define U_PLATFORM U_PF_DARWIN
00161 # endif
00162 #elif defined(BSD) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__MirBSD__)
00163 # if defined(__FreeBSD__)
00164 # include <sys/endian.h>
00165 # endif
00166 # define U_PLATFORM U_PF_BSD
00167 #elif defined(sun) || defined(__sun)
00168
00169 # define U_PLATFORM U_PF_SOLARIS
00170 # if defined(__GNUC__)
00171
00172
00173
00174
00175 # include <sys/isa_defs.h>
00176 # endif
00177 #elif defined(_AIX) || defined(__TOS_AIX__)
00178 # define U_PLATFORM U_PF_AIX
00179 #elif defined(_hpux) || defined(hpux) || defined(__hpux)
00180 # define U_PLATFORM U_PF_HPUX
00181 #elif defined(sgi) || defined(__sgi)
00182 # define U_PLATFORM U_PF_IRIX
00183 #elif defined(__QNX__) || defined(__QNXNTO__)
00184 # define U_PLATFORM U_PF_QNX
00185 #elif defined(__TOS_MVS__)
00186 # define U_PLATFORM U_PF_OS390
00187 #elif defined(__OS400__) || defined(__TOS_OS400__)
00188 # define U_PLATFORM U_PF_OS400
00189 #else
00190 # define U_PLATFORM U_PF_UNKNOWN
00191 #endif
00192
00199
00200
00201
00202
00203
00204
00211 #ifdef U_PLATFORM_USES_ONLY_WIN32_API
00212
00213 #elif (U_PF_WINDOWS <= U_PLATFORM && U_PLATFORM <= U_PF_MINGW) || defined(CYGWINMSVC)
00214 # define U_PLATFORM_USES_ONLY_WIN32_API 1
00215 #else
00216
00217 # define U_PLATFORM_USES_ONLY_WIN32_API 0
00218 #endif
00219
00226 #ifdef U_PLATFORM_HAS_WIN32_API
00227
00228 #elif U_PF_WINDOWS <= U_PLATFORM && U_PLATFORM <= U_PF_CYGWIN
00229 # define U_PLATFORM_HAS_WIN32_API 1
00230 #else
00231 # define U_PLATFORM_HAS_WIN32_API 0
00232 #endif
00233
00240 #ifdef U_PLATFORM_IMPLEMENTS_POSIX
00241
00242 #elif U_PLATFORM_USES_ONLY_WIN32_API
00243 # define U_PLATFORM_IMPLEMENTS_POSIX 0
00244 #else
00245 # define U_PLATFORM_IMPLEMENTS_POSIX 1
00246 #endif
00247
00253 #ifdef U_PLATFORM_IS_LINUX_BASED
00254
00255 #elif U_PF_LINUX <= U_PLATFORM && U_PLATFORM <= 4499
00256 # define U_PLATFORM_IS_LINUX_BASED 1
00257 #else
00258 # define U_PLATFORM_IS_LINUX_BASED 0
00259 #endif
00260
00266 #ifdef U_PLATFORM_IS_DARWIN_BASED
00267
00268 #elif U_PF_DARWIN <= U_PLATFORM && U_PLATFORM <= U_PF_IPHONE
00269 # define U_PLATFORM_IS_DARWIN_BASED 1
00270 #else
00271 # define U_PLATFORM_IS_DARWIN_BASED 0
00272 #endif
00273
00281 #ifdef U_HAVE_STDINT_H
00282
00283 #elif U_PLATFORM_USES_ONLY_WIN32_API
00284 # if defined(__BORLANDC__) || U_PLATFORM == U_PF_MINGW || (defined(_MSC_VER) && _MSC_VER>=1600)
00285
00286 # define U_HAVE_STDINT_H 1
00287 # else
00288 # define U_HAVE_STDINT_H 0
00289 # endif
00290 #elif U_PLATFORM == U_PF_SOLARIS
00291
00292 # define U_HAVE_STDINT_H 0
00293 #elif U_PLATFORM == U_PF_AIX && !defined(_AIX51) && defined(_POWER)
00294
00295 # define U_HAVE_STDINT_H 0
00296 #else
00297 # define U_HAVE_STDINT_H 1
00298 #endif
00299
00306 #ifdef U_HAVE_INTTYPES_H
00307
00308 #elif U_PLATFORM == U_PF_SOLARIS
00309
00310 # define U_HAVE_INTTYPES_H 1
00311 #elif U_PLATFORM == U_PF_AIX && !defined(_AIX51) && defined(_POWER)
00312
00313 # define U_HAVE_INTTYPES_H 1
00314 #else
00315
00316 # define U_HAVE_INTTYPES_H U_HAVE_STDINT_H
00317 #endif
00318
00340 #ifndef U_IOSTREAM_SOURCE
00341 #define U_IOSTREAM_SOURCE 199711
00342 #endif
00343
00349 #ifdef U_HAVE_STD_STRING
00350
00351 #else
00352 # define U_HAVE_STD_STRING 1
00353 #endif
00354
00355
00357
00358
00369 #ifdef __GNUC__
00370 # define U_GCC_MAJOR_MINOR (__GNUC__ * 100 + __GNUC_MINOR__)
00371 #else
00372 # define U_GCC_MAJOR_MINOR 0
00373 #endif
00374
00380 #ifdef U_IS_BIG_ENDIAN
00381
00382 #elif defined(BYTE_ORDER) && defined(BIG_ENDIAN)
00383 # define U_IS_BIG_ENDIAN (BYTE_ORDER == BIG_ENDIAN)
00384 #elif defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__)
00385
00386 # define U_IS_BIG_ENDIAN (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
00387 #elif defined(__BIG_ENDIAN__) || defined(_BIG_ENDIAN)
00388 # define U_IS_BIG_ENDIAN 1
00389 #elif defined(__LITTLE_ENDIAN__) || defined(_LITTLE_ENDIAN)
00390 # define U_IS_BIG_ENDIAN 0
00391 #elif U_PLATFORM == U_PF_OS390 || U_PLATFORM == U_PF_OS400 || defined(__s390__) || defined(__s390x__)
00392
00393 # define U_IS_BIG_ENDIAN 1
00394 #elif defined(_PA_RISC1_0) || defined(_PA_RISC1_1) || defined(_PA_RISC2_0)
00395
00396 # define U_IS_BIG_ENDIAN 1
00397 #elif defined(sparc) || defined(__sparc) || defined(__sparc__)
00398
00399 # define U_IS_BIG_ENDIAN 1
00400 #else
00401 # define U_IS_BIG_ENDIAN 0
00402 #endif
00403
00409 #ifdef U_HAVE_PLACEMENT_NEW
00410
00411 #elif defined(__BORLANDC__)
00412 # define U_HAVE_PLACEMENT_NEW 0
00413 #else
00414 # define U_HAVE_PLACEMENT_NEW 1
00415 #endif
00416
00423 #ifdef U_HAVE_DEBUG_LOCATION_NEW
00424
00425 #elif defined(_MSC_VER)
00426 # define U_HAVE_DEBUG_LOCATION_NEW 1
00427 #else
00428 # define U_HAVE_DEBUG_LOCATION_NEW 0
00429 #endif
00430
00431
00432 #ifndef __has_attribute
00433 # define __has_attribute(x) 0
00434 #endif
00435 #ifndef __has_cpp_attribute
00436 # define __has_cpp_attribute(x) 0
00437 #endif
00438 #ifndef __has_builtin
00439 # define __has_builtin(x) 0
00440 #endif
00441 #ifndef __has_feature
00442 # define __has_feature(x) 0
00443 #endif
00444 #ifndef __has_extension
00445 # define __has_extension(x) 0
00446 #endif
00447 #ifndef __has_warning
00448 # define __has_warning(x) 0
00449 #endif
00450
00456 #if defined(__GNUC__) && __GNUC__>=3
00457 # define U_MALLOC_ATTR __attribute__ ((__malloc__))
00458 #else
00459 # define U_MALLOC_ATTR
00460 #endif
00461
00467 #if (defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))) || __has_attribute(alloc_size)
00468 # define U_ALLOC_SIZE_ATTR(X) __attribute__ ((alloc_size(X)))
00469 # define U_ALLOC_SIZE_ATTR2(X,Y) __attribute__ ((alloc_size(X,Y)))
00470 #else
00471 # define U_ALLOC_SIZE_ATTR(X)
00472 # define U_ALLOC_SIZE_ATTR2(X,Y)
00473 #endif
00474
00481 #ifdef U_CPLUSPLUS_VERSION
00482 # if U_CPLUSPLUS_VERSION != 0 && !defined(__cplusplus)
00483 # undef U_CPLUSPLUS_VERSION
00484 # define U_CPLUSPLUS_VERSION 0
00485 # endif
00486
00487 #elif !defined(__cplusplus)
00488 # define U_CPLUSPLUS_VERSION 0
00489 #elif __cplusplus >= 201402L
00490 # define U_CPLUSPLUS_VERSION 14
00491 #elif __cplusplus >= 201103L
00492 # define U_CPLUSPLUS_VERSION 11
00493 #else
00494
00495 # define U_CPLUSPLUS_VERSION 1
00496 #endif
00497
00504 #ifdef U_HAVE_RVALUE_REFERENCES
00505
00506 #elif U_CPLUSPLUS_VERSION >= 11 || __has_feature(cxx_rvalue_references) \
00507 || defined(__GXX_EXPERIMENTAL_CXX0X__) \
00508 || (defined(_MSC_VER) && _MSC_VER >= 1600)
00509 # define U_HAVE_RVALUE_REFERENCES 1
00510 #else
00511 # define U_HAVE_RVALUE_REFERENCES 0
00512 #endif
00513
00521 #ifdef U_NOEXCEPT
00522
00523 #elif defined(_HAS_EXCEPTIONS) && !_HAS_EXCEPTIONS
00524 # define U_NOEXCEPT
00525 #elif U_CPLUSPLUS_VERSION >= 11 || __has_feature(cxx_noexcept) || __has_extension(cxx_noexcept) \
00526 || (defined(_MSC_VER) && _MSC_VER >= 1900)
00527 # define U_NOEXCEPT noexcept
00528 #else
00529 # define U_NOEXCEPT
00530 #endif
00531
00538 #ifdef __cplusplus
00539 # if __has_cpp_attribute(clang::fallthrough) || \
00540 (__has_feature(cxx_attributes) && __has_warning("-Wimplicit-fallthrough"))
00541 # define U_FALLTHROUGH [[clang::fallthrough]]
00542 # else
00543 # define U_FALLTHROUGH
00544 # endif
00545 #else
00546 # define U_FALLTHROUGH
00547 #endif
00548
00549
00552
00554
00555
00560 #define U_ASCII_FAMILY 0
00561
00566 #define U_EBCDIC_FAMILY 1
00567
00610 #ifdef U_CHARSET_FAMILY
00611
00612 #elif U_PLATFORM == U_PF_OS390 && (!defined(__CHARSET_LIB) || !__CHARSET_LIB)
00613 # define U_CHARSET_FAMILY U_EBCDIC_FAMILY
00614 #elif U_PLATFORM == U_PF_OS400 && !defined(__UTF32__)
00615 # define U_CHARSET_FAMILY U_EBCDIC_FAMILY
00616 #else
00617 # define U_CHARSET_FAMILY U_ASCII_FAMILY
00618 #endif
00619
00640 #ifdef U_CHARSET_IS_UTF8
00641
00642 #elif U_PLATFORM == U_PF_ANDROID || U_PLATFORM_IS_DARWIN_BASED
00643 # define U_CHARSET_IS_UTF8 1
00644 #else
00645 # define U_CHARSET_IS_UTF8 0
00646 #endif
00647
00650
00652
00653
00660 #ifdef U_HAVE_WCHAR_H
00661
00662 #elif U_PLATFORM == U_PF_ANDROID && __ANDROID_API__ < 9
00663
00664
00665
00666
00667
00668 # define U_HAVE_WCHAR_H 0
00669 #else
00670 # define U_HAVE_WCHAR_H 1
00671 #endif
00672
00679 #ifdef U_SIZEOF_WCHAR_T
00680
00681 #elif (U_PLATFORM == U_PF_ANDROID && __ANDROID_API__ < 9)
00682
00683
00684
00685
00686 # define U_SIZEOF_WCHAR_T 1
00687 #elif U_PLATFORM_HAS_WIN32_API || U_PLATFORM == U_PF_CYGWIN
00688 # define U_SIZEOF_WCHAR_T 2
00689 #elif U_PLATFORM == U_PF_AIX
00690
00691
00692
00693
00694
00695
00696
00697
00698 # ifdef __64BIT__
00699 # define U_SIZEOF_WCHAR_T 4
00700 # else
00701 # define U_SIZEOF_WCHAR_T 2
00702 # endif
00703 #elif U_PLATFORM == U_PF_OS390
00704
00705
00706
00707
00708
00709 # ifdef _LP64
00710 # define U_SIZEOF_WCHAR_T 4
00711 # else
00712 # define U_SIZEOF_WCHAR_T 2
00713 # endif
00714 #elif U_PLATFORM == U_PF_OS400
00715 # if defined(__UTF32__)
00716
00717
00718
00719
00720
00721 # define U_SIZEOF_WCHAR_T 4
00722 # elif defined(__UCS2__)
00723
00724
00725
00726
00727
00728 # define U_SIZEOF_WCHAR_T 2
00729 #else
00730
00731
00732
00733
00734
00735 # define U_SIZEOF_WCHAR_T 2
00736 # endif
00737 #else
00738 # define U_SIZEOF_WCHAR_T 4
00739 #endif
00740
00741 #ifndef U_HAVE_WCSCPY
00742 #define U_HAVE_WCSCPY U_HAVE_WCHAR_H
00743 #endif
00744
00755 #ifdef U_HAVE_CHAR16_T
00756
00757 #else
00758
00759
00760
00761
00762
00763
00764
00765
00766 # if U_CPLUSPLUS_VERSION >= 11 || (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L)
00767 # define U_HAVE_CHAR16_T 1
00768 # else
00769 # define U_HAVE_CHAR16_T 0
00770 # endif
00771 #endif
00772
00780 #ifdef U_DECLARE_UTF16
00781
00782 #elif U_HAVE_CHAR16_T \
00783 || (defined(__xlC__) && defined(__IBM_UTF_LITERAL) && U_SIZEOF_WCHAR_T != 2) \
00784 || (defined(__HP_aCC) && __HP_aCC >= 035000) \
00785 || (defined(__HP_cc) && __HP_cc >= 111106)
00786 # define U_DECLARE_UTF16(string) u ## string
00787 #elif U_SIZEOF_WCHAR_T == 2 \
00788 && (U_CHARSET_FAMILY == 0 || (U_PF_OS390 <= U_PLATFORM && U_PLATFORM <= U_PF_OS400 && defined(__UCS2__)))
00789 # define U_DECLARE_UTF16(string) L ## string
00790 #else
00791
00792 #endif
00793
00796
00798
00799
00800 #ifdef U_EXPORT
00801
00802 #elif defined(U_STATIC_IMPLEMENTATION)
00803 # define U_EXPORT
00804 #elif defined(__GNUC__)
00805 # define U_EXPORT __attribute__((visibility("default")))
00806 #elif (defined(__SUNPRO_CC) && __SUNPRO_CC >= 0x550) \
00807 || (defined(__SUNPRO_C) && __SUNPRO_C >= 0x550)
00808 # define U_EXPORT __global
00809
00810
00811 #elif defined(_MSC_VER)
00812 # define U_EXPORT __declspec(dllexport)
00813 #else
00814 # define U_EXPORT
00815 #endif
00816
00817
00818 #ifdef U_EXPORT2
00819
00820 #elif defined(_MSC_VER)
00821 # define U_EXPORT2 __cdecl
00822 #else
00823 # define U_EXPORT2
00824 #endif
00825
00826 #ifdef U_IMPORT
00827
00828 #elif defined(_MSC_VER)
00829
00830 # define U_IMPORT __declspec(dllimport)
00831 #else
00832 # define U_IMPORT
00833 #endif
00834
00846 #if U_PLATFORM == U_PF_OS390 && defined(__cplusplus)
00847 # define U_CALLCONV __cdecl
00848 #else
00849 # define U_CALLCONV U_EXPORT2
00850 #endif
00851
00852
00853
00854 #endif