1*8e33eff8Schristos #ifndef JEMALLOC_INTERNAL_NSTIME_H 2*8e33eff8Schristos #define JEMALLOC_INTERNAL_NSTIME_H 3*8e33eff8Schristos 4*8e33eff8Schristos /* Maximum supported number of seconds (~584 years). */ 5*8e33eff8Schristos #define NSTIME_SEC_MAX KQU(18446744072) 6*8e33eff8Schristos #define NSTIME_INITIALIZER { .ns = 0, } 7*8e33eff8Schristos 8*8e33eff8Schristos typedef struct { 9*8e33eff8Schristos uint64_t ns; 10*8e33eff8Schristos } nstime_t; 11*8e33eff8Schristos 12*8e33eff8Schristos void nstime_init(nstime_t *time, uint64_t ns); 13*8e33eff8Schristos void nstime_init2(nstime_t *time, uint64_t sec, uint64_t nsec); 14*8e33eff8Schristos uint64_t nstime_ns(const nstime_t *time); 15*8e33eff8Schristos uint64_t nstime_sec(const nstime_t *time); 16*8e33eff8Schristos uint64_t nstime_msec(const nstime_t *time); 17*8e33eff8Schristos uint64_t nstime_nsec(const nstime_t *time); 18*8e33eff8Schristos void nstime_copy(nstime_t *time, const nstime_t *source); 19*8e33eff8Schristos int nstime_compare(const nstime_t *a, const nstime_t *b); 20*8e33eff8Schristos void nstime_add(nstime_t *time, const nstime_t *addend); 21*8e33eff8Schristos void nstime_iadd(nstime_t *time, uint64_t addend); 22*8e33eff8Schristos void nstime_subtract(nstime_t *time, const nstime_t *subtrahend); 23*8e33eff8Schristos void nstime_isubtract(nstime_t *time, uint64_t subtrahend); 24*8e33eff8Schristos void nstime_imultiply(nstime_t *time, uint64_t multiplier); 25*8e33eff8Schristos void nstime_idivide(nstime_t *time, uint64_t divisor); 26*8e33eff8Schristos uint64_t nstime_divide(const nstime_t *time, const nstime_t *divisor); 27*8e33eff8Schristos 28*8e33eff8Schristos typedef bool (nstime_monotonic_t)(void); 29*8e33eff8Schristos extern nstime_monotonic_t *JET_MUTABLE nstime_monotonic; 30*8e33eff8Schristos 31*8e33eff8Schristos typedef bool (nstime_update_t)(nstime_t *); 32*8e33eff8Schristos extern nstime_update_t *JET_MUTABLE nstime_update; 33*8e33eff8Schristos 34*8e33eff8Schristos #endif /* JEMALLOC_INTERNAL_NSTIME_H */ 35