X-Git-Url: http://nitlanguage.org diff --git a/lib/realtime.nit b/lib/realtime.nit index 38a601c..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 is c_linker_option("-lrt") +module realtime is ldflags "-lrt" in "C header" `{ #ifdef _POSIX_C_SOURCE @@ -21,17 +21,24 @@ in "C header" `{ #include `} +# 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 class 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,17 +60,18 @@ extern class 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 @@ -71,16 +82,10 @@ 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 `{