aboutsummaryrefslogtreecommitdiff
path: root/guile/starlet/clock.scm
diff options
context:
space:
mode:
Diffstat (limited to 'guile/starlet/clock.scm')
-rw-r--r--guile/starlet/clock.scm27
1 files changed, 22 insertions, 5 deletions
diff --git a/guile/starlet/clock.scm b/guile/starlet/clock.scm
index 6c11936..2e6e2ff 100644
--- a/guile/starlet/clock.scm
+++ b/guile/starlet/clock.scm
@@ -26,8 +26,11 @@
stop-clock!
start-clock!
reverse-clock!
+ reset-clock!
clock-expired?
+ set-clock-expiration-time!
+
<starlet-delayed-clock>
make-delayed-clock
@@ -63,13 +66,15 @@
(stopped
#:init-value #f
+ #:init-keyword #:stopped
#:getter clock-stopped?
#:setter set-clock-stopped!)
(expiration-time
#:init-value #f
#:init-keyword #:expiration-time
- #:getter expiration-time)
+ #:getter expiration-time
+ #:setter set-clock-expiration-time!)
(reversed
#:init-value #f
@@ -78,14 +83,19 @@
(define* (make-clock
- #:key (expiration-time #f))
+ #:key
+ (expiration-time #f)
+ (stopped #f))
(make <starlet-clock>
- #:expiration-time expiration-time))
+ #:expiration-time expiration-time
+ #:stopped stopped))
(define (clock-expired? clock)
- (> (elapsed-time clock)
- (expiration-time clock)))
+ (and
+ clock
+ (> (elapsed-time clock)
+ (expiration-time clock))))
(define-method (elapsed-time (clock <starlet-clock>))
@@ -117,6 +127,13 @@
(set-clock-stopped! clock #f))
+(define-method (reset-clock! (clock <starlet-clock>))
+ (set-start-elapsed-time! clock 0)
+ (set-start-real-time! clock (time-now))
+ (set-clock-reversed! clock #f)
+ (set-clock-stopped! clock #f))
+
+
;; Start the clock running, backwards
(define-method (reverse-clock! (clock <starlet-clock>))
(set-start-elapsed-time! clock (elapsed-time clock))