1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru****************************************************************************** 3b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 4103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius* Copyright (C) 1997-2012, International Business Machines 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Corporation and others. All Rights Reserved. 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru****************************************************************************** 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* FILE NAME : putilimp.h 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Date Name Description 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 10/17/04 grhoten Move internal functions from putil.h to this file. 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru****************************************************************************** 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifndef PUTILIMP_H 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define PUTILIMP_H 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h" 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/putil.h" 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 22103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** 23103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * \def U_SIGNED_RIGHT_SHIFT_IS_ARITHMETIC 24103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Nearly all CPUs and compilers implement a right-shift of a signed integer 25103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * as an Arithmetic Shift Right which copies the sign bit (the Most Significant Bit (MSB)) 26103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * into the vacated bits (sign extension). 27103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * For example, (int32_t)0xfff5fff3>>4 becomes 0xffff5fff and -1>>1=-1. 28103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * 29103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * This can be useful for storing a signed value in the upper bits 30103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * and another bit field in the lower bits. 31103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * The signed value can be retrieved by simple right-shifting. 32103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * 33103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * This is consistent with the Java language. 34103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * 35103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * However, the C standard allows compilers to implement a right-shift of a signed integer 36103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * as a Logical Shift Right which copies a 0 into the vacated bits. 37103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * For example, (int32_t)0xfff5fff3>>4 becomes 0x0fff5fff and -1>>1=0x7fffffff. 38103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * 39103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Code that depends on the natural behavior should be guarded with this macro, 40103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * with an alternate path for unusual platforms. 41103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * @internal 42103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius */ 43103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#ifdef U_SIGNED_RIGHT_SHIFT_IS_ARITHMETIC 44103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* Use the predefined value. */ 45103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#else 46103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* 47103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Nearly all CPUs & compilers implement a right-shift of a signed integer 48103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * as an Arithmetic Shift Right (with sign extension). 49103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius */ 50103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_SIGNED_RIGHT_SHIFT_IS_ARITHMETIC 1 51103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#endif 52103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 53103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** Define this to 1 if your platform supports IEEE 754 floating point, 54103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius to 0 if it does not. */ 55103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#ifndef IEEE_754 56103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define IEEE_754 1 57103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#endif 58103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 59103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** 60103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * uintptr_t is an optional part of the standard definitions in stdint.h. 61103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * The opengroup.org documentation for stdint.h says 62103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * "On XSI-conformant systems, the intptr_t and uintptr_t types are required; 63103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * otherwise, they are optional." 64103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * We assume that when uintptr_t is defined, UINTPTR_MAX is defined as well. 65103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * 66103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Do not use ptrdiff_t since it is signed. size_t is unsigned. 67103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius */ 68103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/* TODO: This check fails on some z environments. Filed a ticket #9357 for this. */ 69103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#if !defined(__intptr_t_defined) && !defined(UINTPTR_MAX) && (U_PLATFORM != U_PF_OS390) 70103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliustypedef size_t uintptr_t; 71103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#endif 72103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 73103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** 74103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * \def U_HAVE_MSVC_2003_OR_EARLIER 75103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Flag for workaround of MSVC 2003 optimization bugs 76103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * @internal 77103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius */ 78103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#if !defined(U_HAVE_MSVC_2003_OR_EARLIER) && defined(_MSC_VER) && (_MSC_VER < 1400) 79103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#define U_HAVE_MSVC_2003_OR_EARLIER 80103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#endif 81103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 82103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/*===========================================================================*/ 83103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** @{ Information about POSIX support */ 84103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/*===========================================================================*/ 85103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 86103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#ifdef U_HAVE_NL_LANGINFO_CODESET 87103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* Use the predefined value. */ 88103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif U_PLATFORM_HAS_WIN32_API 89103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_HAVE_NL_LANGINFO_CODESET 0 90103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#else 91103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_HAVE_NL_LANGINFO_CODESET 1 92103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#endif 93103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 94103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#ifdef U_NL_LANGINFO_CODESET 95103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* Use the predefined value. */ 96103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif !U_HAVE_NL_LANGINFO_CODESET 97103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_NL_LANGINFO_CODESET -1 98103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif U_PLATFORM == U_PF_OS400 99103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* not defined */ 100103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#else 101103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_NL_LANGINFO_CODESET CODESET 102103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#endif 103103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 104103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#ifdef U_TZSET 105103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* Use the predefined value. */ 106103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif U_PLATFORM_USES_ONLY_WIN32_API 107103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_TZSET _tzset 108103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif U_PLATFORM == U_PF_OS400 109103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* not defined */ 110103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#else 111103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_TZSET tzset 112103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#endif 113103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 114103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#ifdef U_TIMEZONE 115103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* Use the predefined value. */ 11654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#elif U_PLATFORM == U_PF_ANDROID 11754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius# define U_TIMEZONE timezone 118103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif U_PLATFORM_IS_LINUX_BASED 119103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_TIMEZONE __timezone 120103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif U_PLATFORM_USES_ONLY_WIN32_API 121103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_TIMEZONE _timezone 12254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#elif U_PLATFORM == U_PF_BSD && !defined(__NetBSD__) 12354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius /* not defined */ 124103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif U_PLATFORM == U_PF_OS400 125103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* not defined */ 126103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#else 127103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_TIMEZONE timezone 128103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#endif 129103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 130103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#ifdef U_TZNAME 131103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* Use the predefined value. */ 132103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif U_PLATFORM_USES_ONLY_WIN32_API 133103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_TZNAME _tzname 134103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif U_PLATFORM == U_PF_OS400 135103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* not defined */ 136103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#else 137103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_TZNAME tzname 138103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#endif 139103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 140103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#ifdef U_HAVE_MMAP 141103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* Use the predefined value. */ 142103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif U_PLATFORM_HAS_WIN32_API 143103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_HAVE_MMAP 0 144103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#else 145103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_HAVE_MMAP 1 146103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#endif 147103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 148103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#ifdef U_HAVE_POPEN 149103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* Use the predefined value. */ 150103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif U_PLATFORM_USES_ONLY_WIN32_API 151103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_HAVE_POPEN 0 152103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif U_PLATFORM == U_PF_OS400 153103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_HAVE_POPEN 0 154103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#else 155103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_HAVE_POPEN 1 156103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#endif 157103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 158103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** 159103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * \def U_HAVE_DIRENT_H 160103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Defines whether dirent.h is available. 161103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * @internal 162103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius */ 163103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#ifdef U_HAVE_DIRENT_H 164103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* Use the predefined value. */ 165103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif U_PLATFORM_HAS_WIN32_API 166103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_HAVE_DIRENT_H 0 167103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#else 168103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_HAVE_DIRENT_H 1 169103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#endif 170103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 171103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** @} */ 172103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 173103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/*===========================================================================*/ 174103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** @{ GCC built in functions for atomic memory operations */ 175103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/*===========================================================================*/ 176103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 177103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** 178103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * \def U_HAVE_GCC_ATOMICS 179103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * @internal 180103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius */ 181103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#ifdef U_HAVE_GCC_ATOMICS 182103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* Use the predefined value. */ 18354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#elif U_GCC_MAJOR_MINOR >= 404 184103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_HAVE_GCC_ATOMICS 1 185103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#else 186103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_HAVE_GCC_ATOMICS 0 187103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#endif 188103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 189103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** @} */ 190103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 191103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/*===========================================================================*/ 192103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** @{ Code alignment */ 193103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/*===========================================================================*/ 194103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 195103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** 196103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * \def U_ALIGN_CODE 197103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * This is used to align code fragments to a specific byte boundary. 198103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * This is useful for getting consistent performance test results. 199103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * @internal 200103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius */ 201103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#ifdef U_ALIGN_CODE 202103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* Use the predefined value. */ 203103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif defined(_MSC_VER) && defined(_M_IX86) && !defined(_MANAGED) 204103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_ALIGN_CODE(boundarySize) __asm align boundarySize 205103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#else 206103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_ALIGN_CODE(boundarySize) 207103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#endif 208103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 209103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** @} */ 210103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 211103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/*===========================================================================*/ 212103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** @{ Programs used by ICU code */ 213103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/*===========================================================================*/ 214103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 215103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** 216103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * \def U_MAKE_IS_NMAKE 217103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Defines whether the "make" program is Windows nmake. 218103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius */ 219103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#ifdef U_MAKE_IS_NMAKE 220103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* Use the predefined value. */ 221103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif U_PLATFORM == U_PF_WINDOWS 222103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_MAKE_IS_NMAKE 1 223103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#else 224103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_MAKE_IS_NMAKE 0 225103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#endif 226103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 227103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** @} */ 228103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*==========================================================================*/ 230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Platform utilities */ 231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*==========================================================================*/ 232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Platform utilities isolates the platform dependencies of the 235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * libarary. For each platform which this code is ported to, these 236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * functions may have to be re-implemented. 237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Floating point utility to determine if a double is Not a Number (NaN). 241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal 242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_INTERNAL UBool U_EXPORT2 uprv_isNaN(double d); 244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Floating point utility to determine if a double has an infinite value. 246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal 247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_INTERNAL UBool U_EXPORT2 uprv_isInfinite(double d); 249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Floating point utility to determine if a double has a positive infinite value. 251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal 252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_INTERNAL UBool U_EXPORT2 uprv_isPositiveInfinity(double d); 254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Floating point utility to determine if a double has a negative infinite value. 256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal 257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_INTERNAL UBool U_EXPORT2 uprv_isNegativeInfinity(double d); 259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Floating point utility that returns a Not a Number (NaN) value. 261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal 262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_INTERNAL double U_EXPORT2 uprv_getNaN(void); 264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Floating point utility that returns an infinite value. 266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal 267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_INTERNAL double U_EXPORT2 uprv_getInfinity(void); 269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Floating point utility to truncate a double. 272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal 273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_INTERNAL double U_EXPORT2 uprv_trunc(double d); 275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Floating point utility to calculate the floor of a double. 277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal 278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_INTERNAL double U_EXPORT2 uprv_floor(double d); 280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Floating point utility to calculate the ceiling of a double. 282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal 283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_INTERNAL double U_EXPORT2 uprv_ceil(double d); 285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Floating point utility to calculate the absolute value of a double. 287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal 288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_INTERNAL double U_EXPORT2 uprv_fabs(double d); 290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Floating point utility to calculate the fractional and integer parts of a double. 292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal 293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_INTERNAL double U_EXPORT2 uprv_modf(double d, double* pinteger); 295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Floating point utility to calculate the remainder of a double divided by another double. 297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal 298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_INTERNAL double U_EXPORT2 uprv_fmod(double d, double y); 300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Floating point utility to calculate d to the power of exponent (d^exponent). 302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal 303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_INTERNAL double U_EXPORT2 uprv_pow(double d, double exponent); 305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Floating point utility to calculate 10 to the power of exponent (10^exponent). 307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal 308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_INTERNAL double U_EXPORT2 uprv_pow10(int32_t exponent); 310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Floating point utility to calculate the maximum value of two doubles. 312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal 313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_INTERNAL double U_EXPORT2 uprv_fmax(double d, double y); 315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Floating point utility to calculate the minimum value of two doubles. 317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal 318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_INTERNAL double U_EXPORT2 uprv_fmin(double d, double y); 320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Private utility to calculate the maximum value of two integers. 322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal 323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_INTERNAL int32_t U_EXPORT2 uprv_max(int32_t d, int32_t y); 325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Private utility to calculate the minimum value of two integers. 327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal 328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_INTERNAL int32_t U_EXPORT2 uprv_min(int32_t d, int32_t y); 330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if U_IS_BIG_ENDIAN 332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru# define uprv_isNegative(number) (*((signed char *)&(number))<0) 333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#else 334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru# define uprv_isNegative(number) (*((signed char *)&(number)+sizeof(number)-1)<0) 335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Return the largest positive number that can be represented by an integer 339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * type of arbitrary bit length. 340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal 341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_INTERNAL double U_EXPORT2 uprv_maxMantissa(void); 343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Floating point utility to calculate the logarithm of a double. 346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal 347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_INTERNAL double U_EXPORT2 uprv_log(double d); 349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Does common notion of rounding e.g. uprv_floor(x + 0.5); 352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param x the double number 353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return the rounded double 354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal 355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_INTERNAL double U_EXPORT2 uprv_round(double x); 357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if 0 359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Returns the number of digits after the decimal point in a double number x. 361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param x the double number 363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return the number of digits after the decimal point in a double number x. 364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal 365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*U_INTERNAL int32_t U_EXPORT2 uprv_digitsAfterDecimal(double x);*/ 367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 369103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#if !U_CHARSET_IS_UTF8 370103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** 371103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Please use ucnv_getDefaultName() instead. 372103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Return the default codepage for this platform and locale. 373103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * This function can call setlocale() on Unix platforms. Please read the 374103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * platform documentation on setlocale() before calling this function. 375103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * @return the default codepage for this platform 376103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * @internal 377103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius */ 378103e9ffba2cba345d0078eb8b8db33249f81840aCraig CorneliusU_INTERNAL const char* U_EXPORT2 uprv_getDefaultCodepage(void); 379103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#endif 380103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 381103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** 382103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Please use uloc_getDefault() instead. 383103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Return the default locale ID string by querying ths system, or 384103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * zero if one cannot be found. 385103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * This function can call setlocale() on Unix platforms. Please read the 386103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * platform documentation on setlocale() before calling this function. 387103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * @return the default locale ID string 388103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * @internal 389103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius */ 390103e9ffba2cba345d0078eb8b8db33249f81840aCraig CorneliusU_INTERNAL const char* U_EXPORT2 uprv_getDefaultLocaleID(void); 391103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Time zone utilities 394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Wrappers for C runtime library functions relating to timezones. 396b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * The t_tzset() function (similar to tzset) uses the current setting 397b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * of the environment variable TZ to assign values to three global 398b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * variables: daylight, timezone, and tzname. These variables have the 399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * following meanings, and are declared in <time.h>. 400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * daylight Nonzero if daylight-saving-time zone (DST) is specified 402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * in TZ; otherwise, 0. Default value is 1. 403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * timezone Difference in seconds between coordinated universal 404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * time and local time. E.g., -28,800 for PST (GMT-8hrs) 405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * tzname(0) Three-letter time-zone name derived from TZ environment 406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * variable. E.g., "PST". 407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * tzname(1) Three-letter DST zone name derived from TZ environment 408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * variable. E.g., "PDT". If DST zone is omitted from TZ, 409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * tzname(1) is an empty string. 410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Notes: For example, to set the TZ environment variable to correspond 412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * to the current time zone in Germany, you can use one of the 413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * following statements: 414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * set TZ=GST1GDT 416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * set TZ=GST+1GDT 417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * If the TZ value is not set, t_tzset() attempts to use the time zone 419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * information specified by the operating system. Under Windows NT 420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * and Windows 95, this information is specified in the Control Panel's 421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Date/Time application. 422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal 423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_INTERNAL void U_EXPORT2 uprv_tzset(void); 425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Difference in seconds between coordinated universal 428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * time and local time. E.g., -28,800 for PST (GMT-8hrs) 429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return the difference in seconds between coordinated universal time and local time. 430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal 431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_INTERNAL int32_t U_EXPORT2 uprv_timezone(void); 433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * tzname(0) Three-letter time-zone name derived from TZ environment 436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * variable. E.g., "PST". 437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * tzname(1) Three-letter DST zone name derived from TZ environment 438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * variable. E.g., "PDT". If DST zone is omitted from TZ, 439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * tzname(1) is an empty string. 440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal 441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_INTERNAL const char* U_EXPORT2 uprv_tzname(int n); 443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Get UTC (GMT) time measured in milliseconds since 0:00 on 1/1/1970. 44627f654740f2a26ad62a5c155af9199af9e69b889claireho * This function is affected by 'faketime' and should be the bottleneck for all user-visible ICU time functions. 447b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * @return the UTC time measured in milliseconds 448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal 449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_INTERNAL UDate U_EXPORT2 uprv_getUTCtime(void); 451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 45327f654740f2a26ad62a5c155af9199af9e69b889claireho * Get UTC (GMT) time measured in milliseconds since 0:00 on 1/1/1970. 45427f654740f2a26ad62a5c155af9199af9e69b889claireho * This function is not affected by 'faketime', so it should only be used by low level test functions- not by anything that 45527f654740f2a26ad62a5c155af9199af9e69b889claireho * exposes time to the end user. 45627f654740f2a26ad62a5c155af9199af9e69b889claireho * @return the UTC time measured in milliseconds 45727f654740f2a26ad62a5c155af9199af9e69b889claireho * @internal 45827f654740f2a26ad62a5c155af9199af9e69b889claireho */ 45927f654740f2a26ad62a5c155af9199af9e69b889clairehoU_INTERNAL UDate U_EXPORT2 uprv_getRawUTCtime(void); 46027f654740f2a26ad62a5c155af9199af9e69b889claireho 46127f654740f2a26ad62a5c155af9199af9e69b889claireho/** 462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Determine whether a pathname is absolute or not, as defined by the platform. 463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param path Pathname to test 464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return TRUE if the path is absolute 465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal (ICU 3.0) 466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_INTERNAL UBool U_EXPORT2 uprv_pathIsAbsolute(const char *path); 468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Use U_MAX_PTR instead of this function. 471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param void pointer to test 472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return the largest possible pointer greater than the base 473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal (ICU 3.8) 474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_INTERNAL void * U_EXPORT2 uprv_maximumPtr(void *base); 476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Maximum value of a (void*) - use to indicate the limit of an 'infinite' buffer. 479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * In fact, buffer sizes must not exceed 2GB so that the difference between 480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the buffer limit and the buffer start can be expressed in an int32_t. 481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * The definition of U_MAX_PTR must fulfill the following conditions: 483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * - return the largest possible pointer greater than base 484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * - return a valid pointer according to the machine architecture (AS/400, 64-bit, etc.) 485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * - avoid wrapping around at high addresses 486b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * - make sure that the returned pointer is not farther from base than 0x7fffffff bytes 487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param base The beginning of a buffer to find the maximum offset from 489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal 490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifndef U_MAX_PTR 492103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# if U_PLATFORM == U_PF_OS390 && !defined(_LP64) 493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* We have 31-bit pointers. */ 494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru# define U_MAX_PTR(base) ((void *)0x7fffffff) 495103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# elif U_PLATFORM == U_PF_OS400 496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru# define U_MAX_PTR(base) uprv_maximumPtr((void *)base) 497b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho# elif 0 498b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho /* 499b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * For platforms where pointers are scalar values (which is normal, but unlike i5/OS) 500b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * but that do not define uintptr_t. 501b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * 502b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * However, this does not work on modern compilers: 503b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * The C++ standard does not define pointer overflow, and allows compilers to 504b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * assume that p+u>p for any pointer p and any integer u>0. 505b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * Thus, modern compilers optimize away the ">" comparison. 506b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * (See ICU tickets #7187 and #8096.) 507b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho */ 508b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho# define U_MAX_PTR(base) \ 509b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho ((void *)(((char *)(base)+0x7fffffffu) > (char *)(base) \ 510b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho ? ((char *)(base)+0x7fffffffu) \ 511b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho : (char *)-1)) 512b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho# else 513b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho /* Default version. C++ standard compliant for scalar pointers. */ 514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru# define U_MAX_PTR(base) \ 515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ((void *)(((uintptr_t)(base)+0x7fffffffu) > (uintptr_t)(base) \ 516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ? ((uintptr_t)(base)+0x7fffffffu) \ 517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru : (uintptr_t)-1)) 518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru# endif 519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 52150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* Dynamic Library Functions */ 52250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 523b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehotypedef void (UVoidFunction)(void); 524b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 525103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#if U_ENABLE_DYLOAD 52650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/** 52750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Load a library 52850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * @internal (ICU 4.4) 52950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho */ 53050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_INTERNAL void * U_EXPORT2 uprv_dl_open(const char *libName, UErrorCode *status); 53150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 53250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/** 53350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Close a library 53450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * @internal (ICU 4.4) 53550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho */ 53650294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_INTERNAL void U_EXPORT2 uprv_dl_close( void *lib, UErrorCode *status); 53750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 53850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/** 539b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * Extract a symbol from a library (function) 540b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * @internal (ICU 4.8) 54150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho */ 542b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehoU_INTERNAL UVoidFunction* U_EXPORT2 uprv_dlsym_func( void *lib, const char *symbolName, UErrorCode *status); 543b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 544b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho/** 545b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * Extract a symbol from a library (function) 546b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * Not implemented, no clients. 547b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * @internal 548b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho */ 549b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho/* U_INTERNAL void * U_EXPORT2 uprv_dlsym_data( void *lib, const char *symbolName, UErrorCode *status); */ 550b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 551103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#endif 552b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 553b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho/** 554b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * Define malloc and related functions 555b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * @internal 556b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho */ 557103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#if U_PLATFORM == U_PF_OS400 558b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho# define uprv_default_malloc(x) _C_TS_malloc(x) 559b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho# define uprv_default_realloc(x,y) _C_TS_realloc(x,y) 560b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho# define uprv_default_free(x) _C_TS_free(x) 561b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho/* also _C_TS_calloc(x) */ 562b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#else 563b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho/* C defaults */ 564b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho# define uprv_default_malloc(x) malloc(x) 565b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho# define uprv_default_realloc(x,y) realloc(x,y) 566b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho# define uprv_default_free(x) free(x) 567b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#endif 568b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 56950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 57050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif 571