1f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/*
2f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)******************************************************************************
3f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)*
4f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)*   Copyright (C) 1997-2010, International Business Machines
5f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)*   Corporation and others.  All Rights Reserved.
6f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)*
7f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)******************************************************************************
8f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)*
9f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)*  FILE NAME : putilimp.h
10f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)*
11f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)*   Date        Name        Description
12f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)*   10/17/04    grhoten     Move internal functions from putil.h to this file.
13f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)******************************************************************************
14f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)*/
15f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
16f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#ifndef PUTILIMP_H
17f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#define PUTILIMP_H
18f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
19f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "unicode/utypes.h"
20f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "unicode/putil.h"
21f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
22f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/*==========================================================================*/
23f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/* Platform utilities                                                       */
24f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/*==========================================================================*/
25f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
26f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
27f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Platform utilities isolates the platform dependencies of the
28f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * libarary.  For each platform which this code is ported to, these
29f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * functions may have to be re-implemented.
30f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
31f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
32f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
33f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Floating point utility to determine if a double is Not a Number (NaN).
34f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @internal
35f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
36f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_INTERNAL UBool   U_EXPORT2 uprv_isNaN(double d);
37f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
38f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Floating point utility to determine if a double has an infinite value.
39f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @internal
40f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
41f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_INTERNAL UBool   U_EXPORT2 uprv_isInfinite(double d);
42f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
43f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Floating point utility to determine if a double has a positive infinite value.
44f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @internal
45f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
46f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_INTERNAL UBool   U_EXPORT2 uprv_isPositiveInfinity(double d);
47f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
48f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Floating point utility to determine if a double has a negative infinite value.
49f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @internal
50f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
51f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_INTERNAL UBool   U_EXPORT2 uprv_isNegativeInfinity(double d);
52f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
53f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Floating point utility that returns a Not a Number (NaN) value.
54f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @internal
55f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
56f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_INTERNAL double  U_EXPORT2 uprv_getNaN(void);
57f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
58f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Floating point utility that returns an infinite value.
59f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @internal
60f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
61f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_INTERNAL double  U_EXPORT2 uprv_getInfinity(void);
62f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
63f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
64f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Floating point utility to truncate a double.
65f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @internal
66f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
67f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_INTERNAL double  U_EXPORT2 uprv_trunc(double d);
68f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
69f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Floating point utility to calculate the floor of a double.
70f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @internal
71f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
72f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_INTERNAL double  U_EXPORT2 uprv_floor(double d);
73f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
74f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Floating point utility to calculate the ceiling of a double.
75f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @internal
76f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
77f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_INTERNAL double  U_EXPORT2 uprv_ceil(double d);
78f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
79f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Floating point utility to calculate the absolute value of a double.
80f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @internal
81f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
82f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_INTERNAL double  U_EXPORT2 uprv_fabs(double d);
83f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
84f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Floating point utility to calculate the fractional and integer parts of a double.
85f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @internal
86f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
87f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_INTERNAL double  U_EXPORT2 uprv_modf(double d, double* pinteger);
88f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
89f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Floating point utility to calculate the remainder of a double divided by another double.
90f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @internal
91f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
92f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_INTERNAL double  U_EXPORT2 uprv_fmod(double d, double y);
93f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
94f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Floating point utility to calculate d to the power of exponent (d^exponent).
95f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @internal
96f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
97f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_INTERNAL double  U_EXPORT2 uprv_pow(double d, double exponent);
98f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
99f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Floating point utility to calculate 10 to the power of exponent (10^exponent).
100f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @internal
101f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
102f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_INTERNAL double  U_EXPORT2 uprv_pow10(int32_t exponent);
103f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
104f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Floating point utility to calculate the maximum value of two doubles.
105f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @internal
106f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
107f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_INTERNAL double  U_EXPORT2 uprv_fmax(double d, double y);
108f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
109f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Floating point utility to calculate the minimum value of two doubles.
110f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @internal
111f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
112f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_INTERNAL double  U_EXPORT2 uprv_fmin(double d, double y);
113f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
114f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Private utility to calculate the maximum value of two integers.
115f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @internal
116f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
117f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_INTERNAL int32_t U_EXPORT2 uprv_max(int32_t d, int32_t y);
118f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
119f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Private utility to calculate the minimum value of two integers.
120f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @internal
121f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
122f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_INTERNAL int32_t U_EXPORT2 uprv_min(int32_t d, int32_t y);
123f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
124f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#if U_IS_BIG_ENDIAN
125f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#   define uprv_isNegative(number) (*((signed char *)&(number))<0)
126f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#else
127f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#   define uprv_isNegative(number) (*((signed char *)&(number)+sizeof(number)-1)<0)
128f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#endif
129f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
130f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
131f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Return the largest positive number that can be represented by an integer
132f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * type of arbitrary bit length.
133f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @internal
134f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
135f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_INTERNAL double  U_EXPORT2 uprv_maxMantissa(void);
136f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
137f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
138f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Floating point utility to calculate the logarithm of a double.
139f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @internal
140f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
141f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_INTERNAL double  U_EXPORT2 uprv_log(double d);
142f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
143f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
144f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Does common notion of rounding e.g. uprv_floor(x + 0.5);
145f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param x the double number
146f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @return the rounded double
147f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @internal
148f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
149f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_INTERNAL double  U_EXPORT2 uprv_round(double x);
150f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
151f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#if 0
152f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
153f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Returns the number of digits after the decimal point in a double number x.
154f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
155f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param x the double number
156f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @return the number of digits after the decimal point in a double number x.
157f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @internal
158f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
159f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/*U_INTERNAL int32_t  U_EXPORT2 uprv_digitsAfterDecimal(double x);*/
160f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#endif
161f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
162f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
163f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Time zone utilities
164f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
165f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Wrappers for C runtime library functions relating to timezones.
166f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * The t_tzset() function (similar to tzset) uses the current setting
167f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * of the environment variable TZ to assign values to three global
168f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * variables: daylight, timezone, and tzname. These variables have the
169f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * following meanings, and are declared in &lt;time.h&gt;.
170f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
171f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *   daylight   Nonzero if daylight-saving-time zone (DST) is specified
172f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *              in TZ; otherwise, 0. Default value is 1.
173f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *   timezone   Difference in seconds between coordinated universal
174f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *              time and local time. E.g., -28,800 for PST (GMT-8hrs)
175f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *   tzname(0)  Three-letter time-zone name derived from TZ environment
176f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *              variable. E.g., "PST".
177f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *   tzname(1)  Three-letter DST zone name derived from TZ environment
178f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *              variable.  E.g., "PDT". If DST zone is omitted from TZ,
179f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *              tzname(1) is an empty string.
180f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
181f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Notes: For example, to set the TZ environment variable to correspond
182f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * to the current time zone in Germany, you can use one of the
183f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * following statements:
184f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
185f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *   set TZ=GST1GDT
186f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *   set TZ=GST+1GDT
187f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
188f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * If the TZ value is not set, t_tzset() attempts to use the time zone
189f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * information specified by the operating system. Under Windows NT
190f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * and Windows 95, this information is specified in the Control Panel's
191f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Date/Time application.
192f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @internal
193f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
194f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_INTERNAL void     U_EXPORT2 uprv_tzset(void);
195f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
196f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
197f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Difference in seconds between coordinated universal
198f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * time and local time. E.g., -28,800 for PST (GMT-8hrs)
199f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @return the difference in seconds between coordinated universal time and local time.
200f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @internal
201f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
202f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_INTERNAL int32_t  U_EXPORT2 uprv_timezone(void);
203f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
204f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
205f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *   tzname(0)  Three-letter time-zone name derived from TZ environment
206f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *              variable. E.g., "PST".
207f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *   tzname(1)  Three-letter DST zone name derived from TZ environment
208f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *              variable.  E.g., "PDT". If DST zone is omitted from TZ,
209f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *              tzname(1) is an empty string.
210f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @internal
211f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
212f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_INTERNAL const char* U_EXPORT2 uprv_tzname(int n);
213f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
214f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
215f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Get UTC (GMT) time measured in milliseconds since 0:00 on 1/1/1970.
216f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * This function is affected by 'faketime' and should be the bottleneck for all user-visible ICU time functions.
217f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @return the UTC time measured in milliseconds
218f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @internal
219f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
220f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_INTERNAL UDate U_EXPORT2 uprv_getUTCtime(void);
221f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
222f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
223f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Get UTC (GMT) time measured in milliseconds since 0:00 on 1/1/1970.
224f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * This function is not affected by 'faketime', so it should only be used by low level test functions- not by anything that
225f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * exposes time to the end user.
226f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @return the UTC time measured in milliseconds
227f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @internal
228f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
229f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_INTERNAL UDate U_EXPORT2 uprv_getRawUTCtime(void);
230f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
231f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
232f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Determine whether a pathname is absolute or not, as defined by the platform.
233f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param path Pathname to test
234f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @return TRUE if the path is absolute
235f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @internal (ICU 3.0)
236f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
237f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_INTERNAL UBool U_EXPORT2 uprv_pathIsAbsolute(const char *path);
238f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
239f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
240f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Use U_MAX_PTR instead of this function.
241f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param void pointer to test
242f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @return the largest possible pointer greater than the base
243f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @internal (ICU 3.8)
244f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
245f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_INTERNAL void * U_EXPORT2 uprv_maximumPtr(void *base);
246f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
247f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
248f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Maximum value of a (void*) - use to indicate the limit of an 'infinite' buffer.
249f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * In fact, buffer sizes must not exceed 2GB so that the difference between
250f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * the buffer limit and the buffer start can be expressed in an int32_t.
251f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
252f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * The definition of U_MAX_PTR must fulfill the following conditions:
253f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * - return the largest possible pointer greater than base
254f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * - return a valid pointer according to the machine architecture (AS/400, 64-bit, etc.)
255f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * - avoid wrapping around at high addresses
256f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * - make sure that the returned pointer is not farther from base than 0x7fffffff
257f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
258f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param base The beginning of a buffer to find the maximum offset from
259f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @internal
260f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
261f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#ifndef U_MAX_PTR
262f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#  if defined(OS390) && !defined(_LP64)
263f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /* We have 31-bit pointers. */
264f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#    define U_MAX_PTR(base) ((void *)0x7fffffff)
265f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#  elif defined(OS400)
266f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#    define U_MAX_PTR(base) uprv_maximumPtr((void *)base)
267f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#  elif defined(__GNUC__) && __GNUC__ >= 4
268f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/*
269f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Due to a compiler optimization bug, gcc 4 causes test failures when doing
270f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * this math arithmetic on pointers on some platforms. It seems like the
271f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * pointers are considered signed instead of unsigned. The uintptr_t type
272f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * isn't available on all platforms (i.e MSVC 6) and pointers aren't always
273f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * a scalar value (i.e. i5/OS see uprv_maximumPtr function).
274f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
275f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#    define U_MAX_PTR(base) \
276f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ((void *)(((uintptr_t)(base)+0x7fffffffu) > (uintptr_t)(base) \
277f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        ? ((uintptr_t)(base)+0x7fffffffu) \
278f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        : (uintptr_t)-1))
279f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#  else
280f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#    define U_MAX_PTR(base) \
281f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    ((char *)(((char *)(base)+0x7fffffffu) > (char *)(base) \
282f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        ? ((char *)(base)+0x7fffffffu) \
283f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        : (char *)-1))
284f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#  endif
285f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#endif
286f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
287f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#if U_ENABLE_DYLOAD
288f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/*  Dynamic Library Functions */
289f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
290f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
291f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Load a library
292f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @internal (ICU 4.4)
293f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
294f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_INTERNAL void * U_EXPORT2 uprv_dl_open(const char *libName, UErrorCode *status);
295f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
296f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
297f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Close a library
298f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @internal (ICU 4.4)
299f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
300f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_INTERNAL void U_EXPORT2 uprv_dl_close( void *lib, UErrorCode *status);
301f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
302f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
303f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Extract a symbol from a library
304f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @internal (ICU 4.4)
305f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
306f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_INTERNAL void * U_EXPORT2 uprv_dl_sym( void *lib, const char *symbolName, UErrorCode *status);
307f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
308f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#endif
309f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
310f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#endif
311