16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*
26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*******************************************************************************
36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   Copyright (C) 2000-2011, International Business Machines
46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   Corporation and others.  All Rights Reserved.
56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*******************************************************************************
66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*
76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   file name:  uversion.h
86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   encoding:   US-ASCII
96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   tab size:   8 (not used)
106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   indentation:4
116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*
126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   Created by: Vladimir Weinstein
136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*
146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*  Gets included by utypes.h and Windows .rc files
156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/
166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \file
196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \brief C API: API for accessing ICU version numbers.
206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*===========================================================================*/
226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* Main ICU version information                                              */
236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*===========================================================================*/
246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef UVERSION_H
266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define UVERSION_H
276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/umachine.h"
296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* Actual version info lives in uvernum.h */
316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/uvernum.h"
326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** Maximum length of the copyright string.
346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *  @stable ICU 2.4
356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_COPYRIGHT_STRING_LENGTH  128
376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** An ICU version consists of up to 4 numbers from 0..255.
396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *  @stable ICU 2.4
406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_MAX_VERSION_LENGTH 4
426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** In a string, ICU version fields are delimited by dots.
446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *  @stable ICU 2.4
456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_VERSION_DELIMITER '.'
476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** The maximum length of an ICU version string.
496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *  @stable ICU 2.4
506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_MAX_VERSION_STRING_LENGTH 20
526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** The binary form of a version on ICU APIs is an array of 4 uint8_t.
546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *  To compare two versions, use memcmp(v1,v2,sizeof(UVersionInfo)).
556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *  @stable ICU 2.4
566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgtypedef uint8_t UVersionInfo[U_MAX_VERSION_LENGTH];
586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*===========================================================================*/
606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* C++ namespace if supported. Versioned unless versioning is disabled.      */
616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*===========================================================================*/
626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \def U_NAMESPACE_BEGIN
656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This is used to begin a declaration of a public ICU C++ API.
666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * When not compiling for C++, it does nothing.
676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * When compiling for C++, it begins an extern "C++" linkage block (to protect
686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * against cases in which an external client includes ICU header files inside
696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * an extern "C" linkage block).
706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * It also begins a versioned-ICU-namespace block.
726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.4
736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \def U_NAMESPACE_END
776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This is used to end a declaration of a public ICU C++ API.
786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * When not compiling for C++, it does nothing.
796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * When compiling for C++, it ends the extern "C++" block begun by
806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * U_NAMESPACE_BEGIN.
816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * It also ends the versioned-ICU-namespace block begun by U_NAMESPACE_BEGIN.
836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.4
846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \def U_NAMESPACE_USE
886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This is used to specify that the rest of the code uses the
896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * public ICU C++ API namespace.
906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This is invoked by default; we recommend that you turn it off:
916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * See the "Recommended Build Options" section of the ICU4C readme
926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * (http://source.icu-project.org/repos/icu/icu/trunk/readme.html#RecBuild)
936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.4
946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \def U_NAMESPACE_QUALIFIER
986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This is used to qualify that a function or class is part of
996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the public ICU C++ API namespace.
1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This macro is unnecessary since ICU 49 requires namespace support.
1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * You can just use "icu::" instead.
1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.4
1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* Define namespace symbols if the compiler supports it. */
1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifdef __cplusplus
1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#   if U_DISABLE_RENAMING
1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#       define U_ICU_NAMESPACE icu
1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        namespace U_ICU_NAMESPACE { }
1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#   else
1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#       define U_ICU_NAMESPACE U_ICU_ENTRY_POINT_RENAME(icu)
1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        namespace U_ICU_NAMESPACE { }
1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        namespace icu = U_ICU_NAMESPACE;
1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#   endif
1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#   define U_NAMESPACE_BEGIN extern "C++" { namespace U_ICU_NAMESPACE {
1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#   define U_NAMESPACE_END } }
1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#   define U_NAMESPACE_USE using namespace U_ICU_NAMESPACE;
1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#   define U_NAMESPACE_QUALIFIER U_ICU_NAMESPACE::
1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#   ifndef U_USING_ICU_NAMESPACE
1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#       define U_USING_ICU_NAMESPACE 1
1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#   endif
1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#   if U_USING_ICU_NAMESPACE
1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        U_NAMESPACE_USE
1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#   endif
1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#else
1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#   define U_NAMESPACE_BEGIN
1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#   define U_NAMESPACE_END
1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#   define U_NAMESPACE_USE
1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#   define U_NAMESPACE_QUALIFIER
1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif
1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*===========================================================================*/
1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* General version helper functions. Definitions in putil.c                  */
1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*===========================================================================*/
1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Parse a string with dotted-decimal version information and
1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * fill in a UVersionInfo structure with the result.
1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Definition of this function lives in putil.c
1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param versionArray The destination structure for the version information.
1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param versionString A string with dotted-decimal version information,
1466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                      with up to four non-negative number fields with
1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                      values of up to 255 each.
1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.4
1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
1506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE void U_EXPORT2
1516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgu_versionFromString(UVersionInfo versionArray, const char *versionString);
1526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
1546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Parse a Unicode string with dotted-decimal version information and
1556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * fill in a UVersionInfo structure with the result.
1566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Definition of this function lives in putil.c
1576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
1586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param versionArray The destination structure for the version information.
1596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param versionString A Unicode string with dotted-decimal version
1606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                      information, with up to four non-negative number
1616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                      fields with values of up to 255 each.
1626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 4.2
1636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
1646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE void U_EXPORT2
1656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgu_versionFromUString(UVersionInfo versionArray, const UChar *versionString);
1666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
1696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Write a string with dotted-decimal version information according
1706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * to the input UVersionInfo.
1716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Definition of this function lives in putil.c
1726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
1736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param versionArray The version information to be written as a string.
1746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param versionString A string buffer that will be filled in with
1756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                      a string corresponding to the numeric version
1766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                      information in versionArray.
1776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                      The buffer size must be at least U_MAX_VERSION_STRING_LENGTH.
1786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.4
1796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
1806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE void U_EXPORT2
1816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgu_versionToString(const UVersionInfo versionArray, char *versionString);
1826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
1846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Gets the ICU release version.  The version array stores the version information
1856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * for ICU.  For example, release "1.3.31.2" is then represented as 0x01031F02.
1866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Definition of this function lives in putil.c
1876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
1886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param versionArray the version # information, the result will be filled in
1896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0
1906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
1916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE void U_EXPORT2
1926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgu_getVersion(UVersionInfo versionArray);
1936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif
194