1*0e209d39SAndroid Build Coastguard Worker // © 2016 and later: Unicode, Inc. and others. 2*0e209d39SAndroid Build Coastguard Worker // License & terms of use: http://www.unicode.org/copyright.html 3*0e209d39SAndroid Build Coastguard Worker /* 4*0e209d39SAndroid Build Coastguard Worker ******************************************************************************* 5*0e209d39SAndroid Build Coastguard Worker * Copyright (C) 2000-2011, International Business Machines 6*0e209d39SAndroid Build Coastguard Worker * Corporation and others. All Rights Reserved. 7*0e209d39SAndroid Build Coastguard Worker ******************************************************************************* 8*0e209d39SAndroid Build Coastguard Worker * 9*0e209d39SAndroid Build Coastguard Worker * file name: uversion.h 10*0e209d39SAndroid Build Coastguard Worker * encoding: UTF-8 11*0e209d39SAndroid Build Coastguard Worker * tab size: 8 (not used) 12*0e209d39SAndroid Build Coastguard Worker * indentation:4 13*0e209d39SAndroid Build Coastguard Worker * 14*0e209d39SAndroid Build Coastguard Worker * Created by: Vladimir Weinstein 15*0e209d39SAndroid Build Coastguard Worker * 16*0e209d39SAndroid Build Coastguard Worker * Gets included by utypes.h and Windows .rc files 17*0e209d39SAndroid Build Coastguard Worker */ 18*0e209d39SAndroid Build Coastguard Worker 19*0e209d39SAndroid Build Coastguard Worker /** 20*0e209d39SAndroid Build Coastguard Worker * \file 21*0e209d39SAndroid Build Coastguard Worker * \brief C API: API for accessing ICU version numbers. 22*0e209d39SAndroid Build Coastguard Worker */ 23*0e209d39SAndroid Build Coastguard Worker /*===========================================================================*/ 24*0e209d39SAndroid Build Coastguard Worker /* Main ICU version information */ 25*0e209d39SAndroid Build Coastguard Worker /*===========================================================================*/ 26*0e209d39SAndroid Build Coastguard Worker 27*0e209d39SAndroid Build Coastguard Worker #ifndef UVERSION_H 28*0e209d39SAndroid Build Coastguard Worker #define UVERSION_H 29*0e209d39SAndroid Build Coastguard Worker 30*0e209d39SAndroid Build Coastguard Worker #include "unicode/umachine.h" 31*0e209d39SAndroid Build Coastguard Worker 32*0e209d39SAndroid Build Coastguard Worker /* Actual version info lives in uvernum.h */ 33*0e209d39SAndroid Build Coastguard Worker #include "unicode/uvernum.h" 34*0e209d39SAndroid Build Coastguard Worker 35*0e209d39SAndroid Build Coastguard Worker /** Maximum length of the copyright string. 36*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.4 37*0e209d39SAndroid Build Coastguard Worker */ 38*0e209d39SAndroid Build Coastguard Worker #define U_COPYRIGHT_STRING_LENGTH 128 39*0e209d39SAndroid Build Coastguard Worker 40*0e209d39SAndroid Build Coastguard Worker /** An ICU version consists of up to 4 numbers from 0..255. 41*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.4 42*0e209d39SAndroid Build Coastguard Worker */ 43*0e209d39SAndroid Build Coastguard Worker #define U_MAX_VERSION_LENGTH 4 44*0e209d39SAndroid Build Coastguard Worker 45*0e209d39SAndroid Build Coastguard Worker /** In a string, ICU version fields are delimited by dots. 46*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.4 47*0e209d39SAndroid Build Coastguard Worker */ 48*0e209d39SAndroid Build Coastguard Worker #define U_VERSION_DELIMITER '.' 49*0e209d39SAndroid Build Coastguard Worker 50*0e209d39SAndroid Build Coastguard Worker /** The maximum length of an ICU version string. 51*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.4 52*0e209d39SAndroid Build Coastguard Worker */ 53*0e209d39SAndroid Build Coastguard Worker #define U_MAX_VERSION_STRING_LENGTH 20 54*0e209d39SAndroid Build Coastguard Worker 55*0e209d39SAndroid Build Coastguard Worker /** The binary form of a version on ICU APIs is an array of 4 uint8_t. 56*0e209d39SAndroid Build Coastguard Worker * To compare two versions, use memcmp(v1,v2,sizeof(UVersionInfo)). 57*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.4 58*0e209d39SAndroid Build Coastguard Worker */ 59*0e209d39SAndroid Build Coastguard Worker typedef uint8_t UVersionInfo[U_MAX_VERSION_LENGTH]; 60*0e209d39SAndroid Build Coastguard Worker 61*0e209d39SAndroid Build Coastguard Worker /*===========================================================================*/ 62*0e209d39SAndroid Build Coastguard Worker /* C++ namespace if supported. Versioned unless versioning is disabled. */ 63*0e209d39SAndroid Build Coastguard Worker /*===========================================================================*/ 64*0e209d39SAndroid Build Coastguard Worker 65*0e209d39SAndroid Build Coastguard Worker /* Define C++ namespace symbols. */ 66*0e209d39SAndroid Build Coastguard Worker #ifdef __cplusplus 67*0e209d39SAndroid Build Coastguard Worker 68*0e209d39SAndroid Build Coastguard Worker /** 69*0e209d39SAndroid Build Coastguard Worker * \def U_NAMESPACE_BEGIN 70*0e209d39SAndroid Build Coastguard Worker * This is used to begin a declaration of a public ICU C++ API within 71*0e209d39SAndroid Build Coastguard Worker * versioned-ICU-namespace block. 72*0e209d39SAndroid Build Coastguard Worker * 73*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.4 74*0e209d39SAndroid Build Coastguard Worker */ 75*0e209d39SAndroid Build Coastguard Worker 76*0e209d39SAndroid Build Coastguard Worker /** 77*0e209d39SAndroid Build Coastguard Worker * \def U_NAMESPACE_END 78*0e209d39SAndroid Build Coastguard Worker * This is used to end a declaration of a public ICU C++ API. 79*0e209d39SAndroid Build Coastguard Worker * It ends the versioned-ICU-namespace block begun by U_NAMESPACE_BEGIN. 80*0e209d39SAndroid Build Coastguard Worker * 81*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.4 82*0e209d39SAndroid Build Coastguard Worker */ 83*0e209d39SAndroid Build Coastguard Worker 84*0e209d39SAndroid Build Coastguard Worker /** 85*0e209d39SAndroid Build Coastguard Worker * \def U_NAMESPACE_USE 86*0e209d39SAndroid Build Coastguard Worker * This is used to specify that the rest of the code uses the 87*0e209d39SAndroid Build Coastguard Worker * public ICU C++ API namespace. 88*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.4 89*0e209d39SAndroid Build Coastguard Worker */ 90*0e209d39SAndroid Build Coastguard Worker 91*0e209d39SAndroid Build Coastguard Worker /** 92*0e209d39SAndroid Build Coastguard Worker * \def U_NAMESPACE_QUALIFIER 93*0e209d39SAndroid Build Coastguard Worker * This is used to qualify that a function or class is part of 94*0e209d39SAndroid Build Coastguard Worker * the public ICU C++ API namespace. 95*0e209d39SAndroid Build Coastguard Worker * 96*0e209d39SAndroid Build Coastguard Worker * This macro is unnecessary since ICU 49 requires namespace support. 97*0e209d39SAndroid Build Coastguard Worker * You can just use "icu::" instead. 98*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.4 99*0e209d39SAndroid Build Coastguard Worker */ 100*0e209d39SAndroid Build Coastguard Worker 101*0e209d39SAndroid Build Coastguard Worker # if U_DISABLE_RENAMING 102*0e209d39SAndroid Build Coastguard Worker # define U_ICU_NAMESPACE icu 103*0e209d39SAndroid Build Coastguard Worker namespace U_ICU_NAMESPACE { } 104*0e209d39SAndroid Build Coastguard Worker # else 105*0e209d39SAndroid Build Coastguard Worker # define U_ICU_NAMESPACE U_ICU_ENTRY_POINT_RENAME(icu) 106*0e209d39SAndroid Build Coastguard Worker namespace U_ICU_NAMESPACE { } 107*0e209d39SAndroid Build Coastguard Worker namespace icu = U_ICU_NAMESPACE; 108*0e209d39SAndroid Build Coastguard Worker # endif 109*0e209d39SAndroid Build Coastguard Worker 110*0e209d39SAndroid Build Coastguard Worker # define U_NAMESPACE_BEGIN namespace U_ICU_NAMESPACE { 111*0e209d39SAndroid Build Coastguard Worker # define U_NAMESPACE_END } 112*0e209d39SAndroid Build Coastguard Worker # define U_NAMESPACE_USE using namespace U_ICU_NAMESPACE; 113*0e209d39SAndroid Build Coastguard Worker # define U_NAMESPACE_QUALIFIER U_ICU_NAMESPACE:: 114*0e209d39SAndroid Build Coastguard Worker 115*0e209d39SAndroid Build Coastguard Worker # ifndef U_USING_ICU_NAMESPACE 116*0e209d39SAndroid Build Coastguard Worker # if defined(U_COMBINED_IMPLEMENTATION) || defined(U_COMMON_IMPLEMENTATION) || \ 117*0e209d39SAndroid Build Coastguard Worker defined(U_I18N_IMPLEMENTATION) || defined(U_IO_IMPLEMENTATION) || \ 118*0e209d39SAndroid Build Coastguard Worker defined(U_LAYOUTEX_IMPLEMENTATION) || defined(U_TOOLUTIL_IMPLEMENTATION) 119*0e209d39SAndroid Build Coastguard Worker # define U_USING_ICU_NAMESPACE 0 120*0e209d39SAndroid Build Coastguard Worker # else 121*0e209d39SAndroid Build Coastguard Worker # define U_USING_ICU_NAMESPACE 0 122*0e209d39SAndroid Build Coastguard Worker # endif 123*0e209d39SAndroid Build Coastguard Worker # endif 124*0e209d39SAndroid Build Coastguard Worker # if U_USING_ICU_NAMESPACE 125*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_USE 126*0e209d39SAndroid Build Coastguard Worker # endif 127*0e209d39SAndroid Build Coastguard Worker #endif /* __cplusplus */ 128*0e209d39SAndroid Build Coastguard Worker 129*0e209d39SAndroid Build Coastguard Worker /*===========================================================================*/ 130*0e209d39SAndroid Build Coastguard Worker /* General version helper functions. Definitions in putil.c */ 131*0e209d39SAndroid Build Coastguard Worker /*===========================================================================*/ 132*0e209d39SAndroid Build Coastguard Worker 133*0e209d39SAndroid Build Coastguard Worker /** 134*0e209d39SAndroid Build Coastguard Worker * Parse a string with dotted-decimal version information and 135*0e209d39SAndroid Build Coastguard Worker * fill in a UVersionInfo structure with the result. 136*0e209d39SAndroid Build Coastguard Worker * Definition of this function lives in putil.c 137*0e209d39SAndroid Build Coastguard Worker * 138*0e209d39SAndroid Build Coastguard Worker * @param versionArray The destination structure for the version information. 139*0e209d39SAndroid Build Coastguard Worker * @param versionString A string with dotted-decimal version information, 140*0e209d39SAndroid Build Coastguard Worker * with up to four non-negative number fields with 141*0e209d39SAndroid Build Coastguard Worker * values of up to 255 each. 142*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.4 143*0e209d39SAndroid Build Coastguard Worker */ 144*0e209d39SAndroid Build Coastguard Worker U_CAPI void U_EXPORT2 145*0e209d39SAndroid Build Coastguard Worker u_versionFromString(UVersionInfo versionArray, const char *versionString); 146*0e209d39SAndroid Build Coastguard Worker 147*0e209d39SAndroid Build Coastguard Worker /** 148*0e209d39SAndroid Build Coastguard Worker * Parse a Unicode string with dotted-decimal version information and 149*0e209d39SAndroid Build Coastguard Worker * fill in a UVersionInfo structure with the result. 150*0e209d39SAndroid Build Coastguard Worker * Definition of this function lives in putil.c 151*0e209d39SAndroid Build Coastguard Worker * 152*0e209d39SAndroid Build Coastguard Worker * @param versionArray The destination structure for the version information. 153*0e209d39SAndroid Build Coastguard Worker * @param versionString A Unicode string with dotted-decimal version 154*0e209d39SAndroid Build Coastguard Worker * information, with up to four non-negative number 155*0e209d39SAndroid Build Coastguard Worker * fields with values of up to 255 each. 156*0e209d39SAndroid Build Coastguard Worker * @stable ICU 4.2 157*0e209d39SAndroid Build Coastguard Worker */ 158*0e209d39SAndroid Build Coastguard Worker U_CAPI void U_EXPORT2 159*0e209d39SAndroid Build Coastguard Worker u_versionFromUString(UVersionInfo versionArray, const UChar *versionString); 160*0e209d39SAndroid Build Coastguard Worker 161*0e209d39SAndroid Build Coastguard Worker 162*0e209d39SAndroid Build Coastguard Worker /** 163*0e209d39SAndroid Build Coastguard Worker * Write a string with dotted-decimal version information according 164*0e209d39SAndroid Build Coastguard Worker * to the input UVersionInfo. 165*0e209d39SAndroid Build Coastguard Worker * Definition of this function lives in putil.c 166*0e209d39SAndroid Build Coastguard Worker * 167*0e209d39SAndroid Build Coastguard Worker * @param versionArray The version information to be written as a string. 168*0e209d39SAndroid Build Coastguard Worker * @param versionString A string buffer that will be filled in with 169*0e209d39SAndroid Build Coastguard Worker * a string corresponding to the numeric version 170*0e209d39SAndroid Build Coastguard Worker * information in versionArray. 171*0e209d39SAndroid Build Coastguard Worker * The buffer size must be at least U_MAX_VERSION_STRING_LENGTH. 172*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.4 173*0e209d39SAndroid Build Coastguard Worker */ 174*0e209d39SAndroid Build Coastguard Worker U_CAPI void U_EXPORT2 175*0e209d39SAndroid Build Coastguard Worker u_versionToString(const UVersionInfo versionArray, char *versionString); 176*0e209d39SAndroid Build Coastguard Worker 177*0e209d39SAndroid Build Coastguard Worker /** 178*0e209d39SAndroid Build Coastguard Worker * Gets the ICU release version. The version array stores the version information 179*0e209d39SAndroid Build Coastguard Worker * for ICU. For example, release "1.3.31.2" is then represented as 0x01031F02. 180*0e209d39SAndroid Build Coastguard Worker * Definition of this function lives in putil.c 181*0e209d39SAndroid Build Coastguard Worker * 182*0e209d39SAndroid Build Coastguard Worker * @param versionArray the version # information, the result will be filled in 183*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.0 184*0e209d39SAndroid Build Coastguard Worker */ 185*0e209d39SAndroid Build Coastguard Worker U_CAPI void U_EXPORT2 186*0e209d39SAndroid Build Coastguard Worker u_getVersion(UVersionInfo versionArray); 187*0e209d39SAndroid Build Coastguard Worker #endif 188