X-Git-Url: http://nitlanguage.org diff --git a/lib/realtime.nit b/lib/realtime.nit index cb62251..3a02d86 100644 --- a/lib/realtime.nit +++ b/lib/realtime.nit @@ -11,7 +11,7 @@ # another product. # Provides the Clock utility class to keep time of real time flow -module realtime +module realtime is ldflags "-lrt" in "C header" `{ #ifdef _POSIX_C_SOURCE @@ -21,17 +21,24 @@ in "C header" `{ #include `} -extern Timespec `{struct timespec*`} +# Elapsed time representation. +extern class Timespec `{struct timespec*`} + + # Init a new Timespec from `s` seconds and `ns` nanoseconds. new ( s, ns : Int ) `{ struct timespec* tv = malloc( sizeof(struct timespec) ); tv->tv_sec = s; tv->tv_nsec = ns; return tv; `} + + # Init a new Timespec from now. new monotonic_now `{ struct timespec* tv = malloc( sizeof(struct timespec) ); clock_gettime( CLOCK_MONOTONIC, tv ); return tv; `} + + # Init a new Timespec copied from another. new copy_of( other : Timespec ) `{ struct timespec* tv = malloc( sizeof(struct timespec) ); tv->tv_sec = other->tv_sec; @@ -39,9 +46,12 @@ extern Timespec `{struct timespec*`} return tv; `} + # Update `self` clock. fun update `{ clock_gettime( CLOCK_MONOTONIC, recv ); `} + + # Substract a Timespec from `self`. fun - ( o : Timespec ) : Timespec do var s = sec - o.sec @@ -50,31 +60,32 @@ extern Timespec `{struct timespec*`} return new Timespec( s, ns ) end + # Number of whole seconds of elapsed time. fun sec : Int `{ return recv->tv_sec; `} + + # Rest of the elapsed time (a fraction of a second). + # + # Number of nanoseconds. fun nanosec : Int `{ return recv->tv_nsec; `} - fun destroy `{ - free( recv ); - `} + # Seconds in Float + # Loss of precision but great to print + fun to_f: Float do return sec.to_f + nanosec.to_f / 1000000000.0 + + redef fun to_s do return "{to_f}s" end # Keeps track of real time class Clock # Time at instanciation - protected var time_at_beginning : Timespec + protected var time_at_beginning = new Timespec.monotonic_now # Time at last time a lapse method was called - protected var time_at_last_lapse : Timespec - - init - do - time_at_beginning = new Timespec.monotonic_now - time_at_last_lapse = new Timespec.monotonic_now - end + protected var time_at_last_lapse = new Timespec.monotonic_now # Smallest time frame reported by clock fun resolution : Timespec `{