Issue #22117: Cleanup pytime.c/.h
This commit is contained in:
parent
09e5cf28ae
commit
1bd18ba9a7
|
@ -13,13 +13,16 @@ functions and constants
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Structure used by time.get_clock_info() */
|
||||
typedef struct {
|
||||
const char *implementation;
|
||||
int monotonic;
|
||||
int adjustable;
|
||||
double resolution;
|
||||
} _Py_clock_info_t;
|
||||
#ifdef PY_INT64_T
|
||||
/* _PyTime_t: Python timestamp with subsecond precision. It can be used to
|
||||
store a duration, and so indirectly a date (related to another date, like
|
||||
UNIX epoch). */
|
||||
typedef PY_INT64_T _PyTime_t;
|
||||
#define _PyTime_MIN PY_LLONG_MIN
|
||||
#define _PyTime_MAX PY_LLONG_MAX
|
||||
#else
|
||||
# error "_PyTime_t need signed 64-bit integer type"
|
||||
#endif
|
||||
|
||||
typedef enum {
|
||||
/* Round towards zero. */
|
||||
|
@ -32,12 +35,6 @@ typedef enum {
|
|||
_PyTime_ROUND_FLOOR
|
||||
} _PyTime_round_t;
|
||||
|
||||
/* Convert a number of seconds, int or float, to time_t. */
|
||||
PyAPI_FUNC(int) _PyTime_ObjectToTime_t(
|
||||
PyObject *obj,
|
||||
time_t *sec,
|
||||
_PyTime_round_t);
|
||||
|
||||
/* Convert a time_t to a PyLong. */
|
||||
PyAPI_FUNC(PyObject *) _PyLong_FromTime_t(
|
||||
time_t sec);
|
||||
|
@ -46,6 +43,12 @@ PyAPI_FUNC(PyObject *) _PyLong_FromTime_t(
|
|||
PyAPI_FUNC(time_t) _PyLong_AsTime_t(
|
||||
PyObject *obj);
|
||||
|
||||
/* Convert a number of seconds, int or float, to time_t. */
|
||||
PyAPI_FUNC(int) _PyTime_ObjectToTime_t(
|
||||
PyObject *obj,
|
||||
time_t *sec,
|
||||
_PyTime_round_t);
|
||||
|
||||
/* Convert a number of seconds, int or float, to a timeval structure.
|
||||
usec is in the range [0; 999999] and rounded towards zero.
|
||||
For example, -1.2 is converted to (-2, 800000). */
|
||||
|
@ -64,22 +67,6 @@ PyAPI_FUNC(int) _PyTime_ObjectToTimespec(
|
|||
long *nsec,
|
||||
_PyTime_round_t);
|
||||
|
||||
/* Initialize time.
|
||||
Return 0 on success, raise an exception and return -1 on error. */
|
||||
PyAPI_FUNC(int) _PyTime_Init(void);
|
||||
|
||||
/****************** NEW _PyTime_t API **********************/
|
||||
|
||||
#ifdef PY_INT64_T
|
||||
/* _PyTime_t: Python timestamp with subsecond precision. It can be used to
|
||||
store a duration, and so indirectly a date (related to another date, like
|
||||
UNIX epoch). */
|
||||
typedef PY_INT64_T _PyTime_t;
|
||||
#define _PyTime_MIN PY_LLONG_MIN
|
||||
#define _PyTime_MAX PY_LLONG_MAX
|
||||
#else
|
||||
# error "_PyTime_t need signed 64-bit integer type"
|
||||
#endif
|
||||
|
||||
/* Create a timestamp from a number of nanoseconds (C long). */
|
||||
PyAPI_FUNC(_PyTime_t) _PyTime_FromNanoseconds(PY_LONG_LONG ns);
|
||||
|
@ -125,14 +112,6 @@ PyAPI_FUNC(int) _PyTime_AsTimespec(_PyTime_t t, struct timespec *ts);
|
|||
works. */
|
||||
PyAPI_FUNC(_PyTime_t) _PyTime_GetSystemClock(void);
|
||||
|
||||
/* Get the current time from the system clock.
|
||||
* Fill clock information if info is not NULL.
|
||||
* Raise an exception and return -1 on error, return 0 on success.
|
||||
*/
|
||||
PyAPI_FUNC(int) _PyTime_GetSystemClockWithInfo(
|
||||
_PyTime_t *t,
|
||||
_Py_clock_info_t *info);
|
||||
|
||||
/* Get the time of a monotonic clock, i.e. a clock that cannot go backwards.
|
||||
The clock is not affected by system clock updates. The reference point of
|
||||
the returned value is undefined, so that only the difference between the
|
||||
|
@ -142,6 +121,23 @@ PyAPI_FUNC(int) _PyTime_GetSystemClockWithInfo(
|
|||
is available and works. */
|
||||
PyAPI_FUNC(_PyTime_t) _PyTime_GetMonotonicClock(void);
|
||||
|
||||
|
||||
/* Structure used by time.get_clock_info() */
|
||||
typedef struct {
|
||||
const char *implementation;
|
||||
int monotonic;
|
||||
int adjustable;
|
||||
double resolution;
|
||||
} _Py_clock_info_t;
|
||||
|
||||
/* Get the current time from the system clock.
|
||||
* Fill clock information if info is not NULL.
|
||||
* Raise an exception and return -1 on error, return 0 on success.
|
||||
*/
|
||||
PyAPI_FUNC(int) _PyTime_GetSystemClockWithInfo(
|
||||
_PyTime_t *t,
|
||||
_Py_clock_info_t *info);
|
||||
|
||||
/* Get the time of a monotonic clock, i.e. a clock that cannot go backwards.
|
||||
The clock is not affected by system clock updates. The reference point of
|
||||
the returned value is undefined, so that only the difference between the
|
||||
|
@ -155,6 +151,10 @@ PyAPI_FUNC(int) _PyTime_GetMonotonicClockWithInfo(
|
|||
_Py_clock_info_t *info);
|
||||
|
||||
|
||||
/* Initialize time.
|
||||
Return 0 on success, raise an exception and return -1 on error. */
|
||||
PyAPI_FUNC(int) _PyTime_Init(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -151,8 +151,6 @@ _PyTime_ObjectToTimeval(PyObject *obj, time_t *sec, long *usec,
|
|||
return _PyTime_ObjectToDenominator(obj, sec, usec, 1e6, round);
|
||||
}
|
||||
|
||||
/****************** NEW _PyTime_t API **********************/
|
||||
|
||||
static void
|
||||
_PyTime_overflow(void)
|
||||
{
|
||||
|
@ -161,7 +159,7 @@ _PyTime_overflow(void)
|
|||
}
|
||||
|
||||
int
|
||||
_PyTime_RoundTowardsInfinity(int is_neg, _PyTime_round_t round)
|
||||
_PyTime_RoundTowardsPosInf(int is_neg, _PyTime_round_t round)
|
||||
{
|
||||
if (round == _PyTime_ROUND_FLOOR)
|
||||
return 0;
|
||||
|
@ -196,7 +194,7 @@ _PyTime_FromTimespec(_PyTime_t *tp, struct timespec *ts, int raise)
|
|||
*tp = t;
|
||||
return res;
|
||||
}
|
||||
#else
|
||||
#elif !defined(MS_WINDOWS)
|
||||
static int
|
||||
_PyTime_FromTimeval(_PyTime_t *tp, struct timeval *tv, int raise)
|
||||
{
|
||||
|
@ -227,7 +225,7 @@ _PyTime_FromSecondsObject(_PyTime_t *t, PyObject *obj, _PyTime_round_t round)
|
|||
d = PyFloat_AsDouble(obj);
|
||||
d *= 1e9;
|
||||
|
||||
if (_PyTime_RoundTowardsInfinity(d < 0, round))
|
||||
if (_PyTime_RoundTowardsPosInf(d < 0, round))
|
||||
d = ceil(d);
|
||||
else
|
||||
d = floor(d);
|
||||
|
@ -293,7 +291,7 @@ _PyTime_Multiply(_PyTime_t t, unsigned int multiply, _PyTime_round_t round)
|
|||
_PyTime_t k;
|
||||
if (multiply < SEC_TO_NS) {
|
||||
k = SEC_TO_NS / multiply;
|
||||
if (_PyTime_RoundTowardsInfinity(t < 0, round))
|
||||
if (_PyTime_RoundTowardsPosInf(t < 0, round))
|
||||
return (t + k - 1) / k;
|
||||
else
|
||||
return t / k;
|
||||
|
@ -353,7 +351,7 @@ _PyTime_AsTimeval(_PyTime_t t, struct timeval *tv, _PyTime_round_t round)
|
|||
res = -1;
|
||||
#endif
|
||||
|
||||
if (_PyTime_RoundTowardsInfinity(tv->tv_sec < 0, round))
|
||||
if (_PyTime_RoundTowardsPosInf(tv->tv_sec < 0, round))
|
||||
tv->tv_usec = (int)((ns + US_TO_NS - 1) / US_TO_NS);
|
||||
else
|
||||
tv->tv_usec = (int)(ns / US_TO_NS);
|
||||
|
|
Loading…
Reference in New Issue