Main Page | Class Hierarchy | Alphabetical List | Data Structures | File List | Data Fields | Globals | Related Pages

putil.h

00001 /* 00002 ****************************************************************************** 00003 * 00004 * Copyright (C) 1997-2001, International Business Machines 00005 * Corporation and others. All Rights Reserved. 00006 * 00007 ****************************************************************************** 00008 * 00009 * FILE NAME : putil.h 00010 * 00011 * Date Name Description 00012 * 05/14/98 nos Creation (content moved here from utypes.h). 00013 * 06/17/99 erm Added IEEE_754 00014 * 07/22/98 stephen Added IEEEremainder, max, min, trunc 00015 * 08/13/98 stephen Added isNegativeInfinity, isPositiveInfinity 00016 * 08/24/98 stephen Added longBitsFromDouble 00017 * 03/02/99 stephen Removed openFile(). Added AS400 support. 00018 * 04/15/99 stephen Converted to C 00019 * 11/15/99 helena Integrated S/390 changes for IEEE support. 00020 * 01/11/00 helena Added u_getVersion. 00021 ****************************************************************************** 00022 */ 00023 00024 #ifndef PUTIL_H 00025 #define PUTIL_H 00026 00027 #include "unicode/utypes.h" 00028 00029 /* Define this to 1 if your platform supports IEEE 754 floating point, 00030 to 0 if it does not. */ 00031 #ifndef IEEE_754 00032 # define IEEE_754 1 00033 #endif 00034 00035 /*==========================================================================*/ 00036 /* Platform utilities */ 00037 /*==========================================================================*/ 00038 00045 /* Floating point utilities 00046 */ 00047 U_CAPI UBool U_EXPORT2 uprv_isNaN(double); 00048 U_CAPI UBool U_EXPORT2 uprv_isInfinite(double); 00049 U_CAPI UBool U_EXPORT2 uprv_isPositiveInfinity(double); 00050 U_CAPI UBool U_EXPORT2 uprv_isNegativeInfinity(double); 00051 U_CAPI double U_EXPORT2 uprv_getNaN(void); 00052 U_CAPI double U_EXPORT2 uprv_getInfinity(void); 00053 00054 U_CAPI double U_EXPORT2 uprv_trunc(double d); 00055 U_CAPI double U_EXPORT2 uprv_floor(double x); 00056 U_CAPI double U_EXPORT2 uprv_ceil(double x); 00057 U_CAPI double U_EXPORT2 uprv_fabs(double x); 00058 U_CAPI double U_EXPORT2 uprv_modf(double x, double* y); 00059 U_CAPI double U_EXPORT2 uprv_fmod(double x, double y); 00060 U_CAPI double U_EXPORT2 uprv_pow(double x, double y); 00061 U_CAPI double U_EXPORT2 uprv_pow10(int32_t x); 00062 U_CAPI double U_EXPORT2 uprv_fmax(double x, double y); 00063 U_CAPI double U_EXPORT2 uprv_fmin(double x, double y); 00064 U_CAPI int32_t U_EXPORT2 uprv_max(int32_t x, int32_t y); 00065 U_CAPI int32_t U_EXPORT2 uprv_min(int32_t x, int32_t y); 00066 00067 #if U_IS_BIG_ENDIAN 00068 # define uprv_isNegative(number) (*((signed char *)&(number))<0) 00069 #else 00070 # define uprv_isNegative(number) (*((signed char *)&(number)+sizeof(number)-1)<0) 00071 #endif 00072 00077 U_CAPI double U_EXPORT2 uprv_maxMantissa(void); 00078 00089 U_CAPI int16_t U_EXPORT2 uprv_log10(double d); 00090 00091 U_CAPI double U_EXPORT2 uprv_log(double d); 00092 00094 U_CAPI double U_EXPORT2 uprv_round(double x); 00095 00101 U_CAPI int32_t U_EXPORT2 uprv_digitsAfterDecimal(double x); 00102 00135 U_CAPI void U_EXPORT2 uprv_tzset(void); 00136 00141 U_CAPI int32_t U_EXPORT2 uprv_timezone(void); 00142 00150 U_CAPI char* U_EXPORT2 uprv_tzname(int n); 00151 00156 U_CAPI int32_t U_EXPORT2 uprv_getUTCtime(void); 00157 00179 U_CAPI const char* U_EXPORT2 u_getDataDirectory(void); 00180 00194 U_CAPI void U_EXPORT2 u_setDataDirectory(const char *directory); 00195 00200 U_CAPI const char* U_EXPORT2 uprv_getDefaultCodepage(void); 00201 00207 U_CAPI const char* U_EXPORT2 uprv_getDefaultLocaleID(void); 00208 00209 /* 00210 * Finds the least double greater than d (if positive == true), 00211 * or the greatest double less than d (if positive == false). 00212 * 00213 * This is a special purpose function defined by the ChoiceFormat API 00214 * documentation. 00215 * It is not a general purpose function and not defined for NaN or Infinity 00216 * @deprecated This will be removed after 2002-Jun-30. Use the ChoiceFormat closures API instead. 00217 */ 00218 U_CAPI double U_EXPORT2 uprv_nextDouble(double d, UBool positive); 00219 00225 #ifdef XP_MAC 00226 # define U_FILE_SEP_CHAR ':' 00227 # define U_PATH_SEP_CHAR ';' 00228 # define U_FILE_SEP_STRING ":" 00229 # define U_PATH_SEP_STRING ";" 00230 #elif defined(WIN32) || defined(OS2) 00231 # define U_FILE_SEP_CHAR '\\' 00232 # define U_PATH_SEP_CHAR ';' 00233 # define U_FILE_SEP_STRING "\\" 00234 # define U_PATH_SEP_STRING ";" 00235 #else 00236 # define U_FILE_SEP_CHAR '/' 00237 # define U_PATH_SEP_CHAR ':' 00238 # define U_FILE_SEP_STRING "/" 00239 # define U_PATH_SEP_STRING ":" 00240 #endif 00241 00258 U_CAPI void U_EXPORT2 00259 u_charsToUChars(const char *cs, UChar *us, int32_t length); 00260 00278 U_CAPI void U_EXPORT2 00279 u_UCharsToChars(const UChar *us, char *cs, int32_t length); 00280 00281 /* Define U_UPPER_ORDINAL */ 00282 #if U_CHARSET_FAMILY==U_ASCII_FAMILY 00283 # define U_UPPER_ORDINAL(x) ((x)-'A') 00284 #elif U_CHARSET_FAMILY==U_EBCDIC_FAMILY 00285 # define U_UPPER_ORDINAL(x) (((x) < 'J') ? ((x)-'A') : \ 00286 (((x) < 'S') ? ((x)-'J'+9) : \ 00287 ((x)-'S'+18))) 00288 #else 00289 # error Unknown charset family! 00290 #endif 00291 00306 #ifndef U_MAX_PTR 00307 # ifdef OS390 00308 # define U_MAX_PTR(base) ((void *)0x7fffffff) 00309 # elif defined(OS400) 00310 /* 00311 * With the provided macro we should never be out of range of a given segment 00312 * (a traditional/typical segment that is). Our segments have 5 bytes for the id 00313 * and 3 bytes for the offset. The key is that the casting takes care of only 00314 * retrieving the offset portion minus x1000. Hence, the smallest offset seen in 00315 * a program is x001000 and when casted to an int would be 0. That's why we can 00316 * only add 0xffefff. Otherwise, we would exceed the segment. 00317 * 00318 * Currently, 16MB is the current addressing limitation on as/400. This macro 00319 * may eventually be changed to use 2GB addressability for the newer version of 00320 * as/400 machines. 00321 */ 00322 # define U_MAX_PTR(base) ((void *)(((char *)base)-((int32_t)(base))+((int32_t)0xffefff))) 00323 # else 00324 # define U_MAX_PTR(base) ((void *)(((char *)(base)+0x7fffffff) > (char *)(base) ? ((char *)(base)+0x7fffffff) : (char *)-1)) 00325 # endif 00326 #endif 00327 00328 #endif

Generated on Wed Aug 18 05:18:14 2004 for ICU 2.1 by doxygen 1.3.7