1/* 2 * Copyright 2011, Ingo Weinhold, ingo_weinhold@gmx.de. 3 * Distributed under the terms of the MIT License. 4 */ 5#ifndef _LIBROOT_TIME_PRIVATE_H 6#define _LIBROOT_TIME_PRIVATE_H 7 8 9#include <errno.h> 10#include <sys/cdefs.h> 11#include <sys/time.h> 12#include <time.h> 13 14#include <SupportDefs.h> 15 16#include <new> 17 18#define CLOCKS_PER_SEC_BEOS 1000 19#define CLK_TCK_BEOS CLOCKS_PER_SEC_BEOS 20 21#define MICROSECONDS_PER_CLOCK_TICK (1000000 / CLOCKS_PER_SEC) 22#define MICROSECONDS_PER_CLOCK_TICK_BEOS (1000000 / CLOCKS_PER_SEC_BEOS) 23 24 25struct __timer_t { 26 int32 id; 27 thread_id thread; 28 29 void SetTo(int32 id, thread_id thread) 30 { 31 this->id = id; 32 this->thread = thread; 33 } 34}; 35 36 37static inline void 38bigtime_to_timespec(bigtime_t time, timespec& spec) 39{ 40 spec.tv_sec = time / 1000000; 41 spec.tv_nsec = (time % 1000000) * 1000; 42} 43 44 45static inline bool 46timespec_to_bigtime(const timespec& spec, bigtime_t& _time) 47{ 48 if (spec.tv_sec < 0 || spec.tv_nsec < 0 || spec.tv_nsec >= 1000000000) 49 return false; 50 51 _time = (bigtime_t)spec.tv_sec * 1000000 + (spec.tv_nsec + 999) / 1000; 52 53 return true; 54} 55 56 57static inline bool 58timeval_to_timespec(const timeval& val, timespec& spec) 59{ 60 if (val.tv_sec < 0 || val.tv_usec < 0 || val.tv_usec >= 1000000) 61 return false; 62 63 spec.tv_sec = val.tv_sec; 64 spec.tv_nsec = val.tv_usec * 1000; 65 66 return true; 67} 68 69 70static inline bool 71timeval_to_bigtime(const timeval& val, bigtime_t& _time) 72{ 73 timespec spec; 74 return timeval_to_timespec(val, spec) && timespec_to_bigtime(spec, _time); 75} 76 77 78static inline void 79timespec_to_timeval(const timespec& spec, timeval& val) 80{ 81 val.tv_sec = spec.tv_sec; 82 val.tv_usec = spec.tv_nsec / 1000; 83} 84 85 86__BEGIN_DECLS 87 88 89clock_t __clock_beos(void); 90clock_t __clock(void); 91 92 93__END_DECLS 94 95 96#endif // _LIBROOT_TIME_PRIVATE_H 97