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

putil.h

00001 /*
00002 ******************************************************************************
00003 *
00004 *   Copyright (C) 1997-2003, 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 
00049 U_CAPI UBool   U_EXPORT2 uprv_isNaN(double d);
00054 U_CAPI UBool   U_EXPORT2 uprv_isInfinite(double d);
00059 U_CAPI UBool   U_EXPORT2 uprv_isPositiveInfinity(double d);
00064 U_CAPI UBool   U_EXPORT2 uprv_isNegativeInfinity(double d);
00069 U_CAPI double  U_EXPORT2 uprv_getNaN(void);
00074 U_CAPI double  U_EXPORT2 uprv_getInfinity(void);
00075 
00080 U_CAPI double  U_EXPORT2 uprv_trunc(double d);
00085 U_CAPI double  U_EXPORT2 uprv_floor(double d);
00090 U_CAPI double  U_EXPORT2 uprv_ceil(double d);
00095 U_CAPI double  U_EXPORT2 uprv_fabs(double d);
00100 U_CAPI double  U_EXPORT2 uprv_modf(double d, double* pinteger);
00105 U_CAPI double  U_EXPORT2 uprv_fmod(double d, double y);
00110 U_CAPI double  U_EXPORT2 uprv_pow(double d, double exponent);
00115 U_CAPI double  U_EXPORT2 uprv_pow10(int32_t exponent);
00120 U_CAPI double  U_EXPORT2 uprv_fmax(double d, double y);
00125 U_CAPI double  U_EXPORT2 uprv_fmin(double d, double y);
00130 U_CAPI int32_t U_EXPORT2 uprv_max(int32_t d, int32_t y);
00135 U_CAPI int32_t U_EXPORT2 uprv_min(int32_t d, int32_t y);
00136 
00137 #if U_IS_BIG_ENDIAN
00138 #   define uprv_isNegative(number) (*((signed char *)&(number))<0)
00139 #else
00140 #   define uprv_isNegative(number) (*((signed char *)&(number)+sizeof(number)-1)<0)
00141 #endif
00142 
00148 U_CAPI double  U_EXPORT2 uprv_maxMantissa(void);
00149 
00161 U_CAPI int16_t  U_EXPORT2 uprv_log10(double d);
00162 
00167 U_CAPI double  U_EXPORT2 uprv_log(double d);
00168 
00175 U_CAPI double  U_EXPORT2 uprv_round(double x);
00176 
00184 U_CAPI int32_t  U_EXPORT2 uprv_digitsAfterDecimal(double x);
00185 
00218 U_CAPI void     U_EXPORT2 uprv_tzset(void);
00219 
00226 U_CAPI int32_t  U_EXPORT2 uprv_timezone(void);
00227 
00236 U_CAPI char*    U_EXPORT2 uprv_tzname(int n);
00237 
00243 U_CAPI int32_t  U_EXPORT2 uprv_getUTCtime(void);
00244 
00265 U_CAPI const char* U_EXPORT2 u_getDataDirectory(void);
00266 
00286 U_CAPI void U_EXPORT2 u_setDataDirectory(const char *directory);
00287 
00296 U_CAPI const char*  U_EXPORT2 uprv_getDefaultCodepage(void);
00297 
00307 U_CAPI const char*  U_EXPORT2 uprv_getDefaultLocaleID(void);
00308 
00314 #ifdef XP_MAC
00315 #   define U_FILE_SEP_CHAR ':'
00316 #   define U_FILE_ALT_SEP_CHAR ':'
00317 #   define U_PATH_SEP_CHAR ';'
00318 #   define U_FILE_SEP_STRING ":"
00319 #   define U_FILE_ALT_SEP_STRING ":"
00320 #   define U_PATH_SEP_STRING ";"
00321 #elif defined(WIN32) || defined(OS2)
00322 #   define U_FILE_SEP_CHAR '\\'
00323 #   define U_FILE_ALT_SEP_CHAR '/'
00324 #   define U_PATH_SEP_CHAR ';'
00325 #   define U_FILE_SEP_STRING "\\"
00326 #   define U_FILE_ALT_SEP_STRING "/"
00327 #   define U_PATH_SEP_STRING ";"
00328 #else
00329 #   define U_FILE_SEP_CHAR '/'
00330 #   define U_FILE_ALT_SEP_CHAR '/'
00331 #   define U_PATH_SEP_CHAR ':'
00332 #   define U_FILE_SEP_STRING "/"
00333 #   define U_FILE_ALT_SEP_STRING "/"
00334 #   define U_PATH_SEP_STRING ":"
00335 #endif
00336 
00353 U_CAPI void U_EXPORT2
00354 u_charsToUChars(const char *cs, UChar *us, int32_t length);
00355 
00373 U_CAPI void U_EXPORT2
00374 u_UCharsToChars(const UChar *us, char *cs, int32_t length);
00375 
00386 U_CAPI UBool U_EXPORT2
00387 uprv_isInvariantString(const char *s, int32_t length);
00388 
00399 U_CAPI UBool U_EXPORT2
00400 uprv_isInvariantUString(const UChar *s, int32_t length);
00401 
00407 #if U_CHARSET_FAMILY==U_ASCII_FAMILY
00408 #   define U_UPPER_ORDINAL(x) ((x)-'A')
00409 #elif U_CHARSET_FAMILY==U_EBCDIC_FAMILY
00410 #   define U_UPPER_ORDINAL(x) (((x) < 'J') ? ((x)-'A') : \
00411                               (((x) < 'S') ? ((x)-'J'+9) : \
00412                                ((x)-'S'+18)))
00413 #else
00414 #   error Unknown charset family!
00415 #endif
00416 
00431 #ifndef U_MAX_PTR
00432 #  ifdef OS390
00433 #    define U_MAX_PTR(base) ((void *)0x7fffffff)
00434 #  elif defined(OS400)
00435 /*
00436  * With the provided macro we should never be out of range of a given segment
00437  * (a traditional/typical segment that is).  Our segments have 5 bytes for the id
00438  * and 3 bytes for the offset.  The key is that the casting takes care of only
00439  * retrieving the offset portion minus x1000.  Hence, the smallest offset seen in
00440  * a program is x001000 and when casted to an int would be 0.  That's why we can
00441  * only add 0xffefff.  Otherwise, we would exceed the segment.
00442  *
00443  * Currently, 16MB is the current addressing limitation on as/400.  This macro
00444  * may eventually be changed to use 2GB addressability for the newer version of
00445  * as/400 machines.
00446  */
00447 #    define U_MAX_PTR(base) ((void *)(((char *)base)-((int32_t)(base))+((int32_t)0xffefff)))
00448 #  else
00449 #    define U_MAX_PTR(base) ((void *)(((char *)(base)+0x7fffffffu) > (char *)(base) ? ((char *)(base)+0x7fffffffu) : (char *)-1))
00450 #  endif
00451 #endif
00452 
00453 #endif

Generated on Wed May 18 17:29:14 2005 for ICU 2.8 by  doxygen 1.4.2