;;;; (module current-nanoseconds (;export current-flnanoseconds current-nanoseconds) (import scheme (chicken base) (chicken type) (chicken flonum) (chicken foreign)) (: current-flnanoseconds (-> float)) (: current-nanoseconds (-> integer)) ;fp-inlines (define (fpnegative? n) (fp> 0.0 n)) (: get-nanosecs (-> float)) (cond-expand (macosx (include "macosx") ) (windows (include "windows") ) (unix (include "unix") ) (else (error "unsupported platform") ) ) (cond-expand (reliable-time (define current-flnanoseconds get-nanosecs) ) (else (define (current-flnanoseconds) (let ((μs (get-nanosecs))) (when (fpnegative? μs) (warning 'current-nanoseconds "cannot retrieve time reliably")) μs ) ) ) ) (define (current-nanoseconds) (inexact->exact (fpfloor (current-flnanoseconds)))) ) ;module current-nanoseconds