thread.c: Move double2hrtime and hrtime2double to hrtime.h
... to make them available in other places than thread.c
This commit is contained in:
parent
42a0bed351
commit
a94002115b
Notes:
git
2022-03-30 16:51:11 +09:00
48
hrtime.h
48
hrtime.h
@ -165,4 +165,52 @@ rb_hrtime2timeval(struct timeval *tv, const rb_hrtime_t *hrt)
|
|||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include "internal/warnings.h"
|
||||||
|
#include "internal/time.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Back when we used "struct timeval", not all platforms implemented
|
||||||
|
* tv_sec as time_t. Nowadays we use "struct timespec" and tv_sec
|
||||||
|
* seems to be implemented more consistently across platforms.
|
||||||
|
* At least other parts of our code hasn't had to deal with non-time_t
|
||||||
|
* tv_sec in timespec...
|
||||||
|
*/
|
||||||
|
#define TIMESPEC_SEC_MAX TIMET_MAX
|
||||||
|
#define TIMESPEC_SEC_MIN TIMET_MIN
|
||||||
|
|
||||||
|
COMPILER_WARNING_PUSH
|
||||||
|
#if __has_warning("-Wimplicit-int-float-conversion")
|
||||||
|
COMPILER_WARNING_IGNORED(-Wimplicit-int-float-conversion)
|
||||||
|
#elif defined(_MSC_VER)
|
||||||
|
/* C4305: 'initializing': truncation from '__int64' to 'const double' */
|
||||||
|
COMPILER_WARNING_IGNORED(4305)
|
||||||
|
#endif
|
||||||
|
static const double TIMESPEC_SEC_MAX_as_double = TIMESPEC_SEC_MAX;
|
||||||
|
COMPILER_WARNING_POP
|
||||||
|
|
||||||
|
static inline rb_hrtime_t *
|
||||||
|
double2hrtime(rb_hrtime_t *hrt, double d)
|
||||||
|
{
|
||||||
|
/* assume timespec.tv_sec has same signedness as time_t */
|
||||||
|
const double TIMESPEC_SEC_MAX_PLUS_ONE = 2.0 * (TIMESPEC_SEC_MAX_as_double / 2.0 + 1.0);
|
||||||
|
|
||||||
|
if (TIMESPEC_SEC_MAX_PLUS_ONE <= d) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
else if (d <= 0) {
|
||||||
|
*hrt = 0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
*hrt = (rb_hrtime_t)(d * (double)RB_HRTIME_PER_SEC);
|
||||||
|
}
|
||||||
|
return hrt;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline double
|
||||||
|
hrtime2double(rb_hrtime_t hrt)
|
||||||
|
{
|
||||||
|
return (double)hrt / (double)RB_HRTIME_PER_SEC;
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* RB_HRTIME_H */
|
#endif /* RB_HRTIME_H */
|
||||||
|
40
thread.c
40
thread.c
@ -1144,8 +1144,6 @@ remove_from_join_list(VALUE arg)
|
|||||||
return Qnil;
|
return Qnil;
|
||||||
}
|
}
|
||||||
|
|
||||||
static rb_hrtime_t *double2hrtime(rb_hrtime_t *, double);
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
thread_finished(rb_thread_t *th)
|
thread_finished(rb_thread_t *th)
|
||||||
{
|
{
|
||||||
@ -1352,44 +1350,6 @@ thread_value(VALUE self)
|
|||||||
* Thread Scheduling
|
* Thread Scheduling
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
|
||||||
* Back when we used "struct timeval", not all platforms implemented
|
|
||||||
* tv_sec as time_t. Nowadays we use "struct timespec" and tv_sec
|
|
||||||
* seems to be implemented more consistently across platforms.
|
|
||||||
* At least other parts of our code hasn't had to deal with non-time_t
|
|
||||||
* tv_sec in timespec...
|
|
||||||
*/
|
|
||||||
#define TIMESPEC_SEC_MAX TIMET_MAX
|
|
||||||
#define TIMESPEC_SEC_MIN TIMET_MIN
|
|
||||||
|
|
||||||
COMPILER_WARNING_PUSH
|
|
||||||
#if __has_warning("-Wimplicit-int-float-conversion")
|
|
||||||
COMPILER_WARNING_IGNORED(-Wimplicit-int-float-conversion)
|
|
||||||
#elif defined(_MSC_VER)
|
|
||||||
/* C4305: 'initializing': truncation from '__int64' to 'const double' */
|
|
||||||
COMPILER_WARNING_IGNORED(4305)
|
|
||||||
#endif
|
|
||||||
static const double TIMESPEC_SEC_MAX_as_double = TIMESPEC_SEC_MAX;
|
|
||||||
COMPILER_WARNING_POP
|
|
||||||
|
|
||||||
static rb_hrtime_t *
|
|
||||||
double2hrtime(rb_hrtime_t *hrt, double d)
|
|
||||||
{
|
|
||||||
/* assume timespec.tv_sec has same signedness as time_t */
|
|
||||||
const double TIMESPEC_SEC_MAX_PLUS_ONE = 2.0 * (TIMESPEC_SEC_MAX_as_double / 2.0 + 1.0);
|
|
||||||
|
|
||||||
if (TIMESPEC_SEC_MAX_PLUS_ONE <= d) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
else if (d <= 0) {
|
|
||||||
*hrt = 0;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
*hrt = (rb_hrtime_t)(d * (double)RB_HRTIME_PER_SEC);
|
|
||||||
}
|
|
||||||
return hrt;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
getclockofday(struct timespec *ts)
|
getclockofday(struct timespec *ts)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user