nitlanguage
/
nit.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
modelize: add `AAttrPropdef::mtype` to factorize the type access
[nit.git]
/
lib
/
realtime.nit
diff --git
a/lib/realtime.nit
b/lib/realtime.nit
index
cb62251
..
960a3cb
100644
(file)
--- 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
# 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
in "C header" `{
#ifdef _POSIX_C_SOURCE
@@
-21,17
+21,24
@@
in "C header" `{
#include <time.h>
`}
#include <time.h>
`}
-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;
`}
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;
`}
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;
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;
`}
return tv;
`}
+ # Update `self` clock.
fun update `{
fun update `{
- clock_gettime( CLOCK_MONOTONIC, recv );
+ clock_gettime(CLOCK_MONOTONIC, self);
`}
`}
+
+ # Substract a Timespec from `self`.
fun - ( o : Timespec ) : Timespec
do
var s = sec - o.sec
fun - ( o : Timespec ) : Timespec
do
var s = sec - o.sec
@@
-50,31
+60,32
@@
extern Timespec `{struct timespec*`}
return new Timespec( s, ns )
end
return new Timespec( s, ns )
end
+ # Number of whole seconds of elapsed time.
fun sec : Int `{
fun sec : Int `{
- return recv->tv_sec;
+ return self->tv_sec;
`}
`}
+
+ # Rest of the elapsed time (a fraction of a second).
+ #
+ # Number of nanoseconds.
fun nanosec : Int `{
fun nanosec : Int `{
- return recv->tv_nsec;
+ return self->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
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
# 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 `{
# Smallest time frame reported by clock
fun resolution : Timespec `{