mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-07 15:00:34 -08:00
* emacs-lisp/timer.el (timer-relative-time): Use time-add.
This commit is contained in:
parent
3103f8b658
commit
fe955043aa
2 changed files with 8 additions and 21 deletions
|
|
@ -110,27 +110,12 @@ of SECS seconds since the epoch. SECS may be a fraction."
|
|||
(defun timer-relative-time (time secs &optional usecs)
|
||||
"Advance TIME by SECS seconds and optionally USECS microseconds.
|
||||
SECS may be either an integer or a floating point number."
|
||||
;; FIXME: we should just use (time-add time (list 0 secs usecs))
|
||||
(let ((high (car time))
|
||||
(low (if (consp (cdr time)) (nth 1 time) (cdr time)))
|
||||
(micro (if (numberp (car-safe (cdr-safe (cdr time))))
|
||||
(nth 2 time)
|
||||
0)))
|
||||
;; Add
|
||||
(if usecs (setq micro (+ micro usecs)))
|
||||
(if (floatp secs)
|
||||
(setq micro (+ micro (floor (* 1000000 (- secs (floor secs)))))))
|
||||
(setq low (+ low (floor secs)))
|
||||
|
||||
;; Normalize
|
||||
;; `/' rounds towards zero while `mod' returns a positive number,
|
||||
;; so we can't rely on (= a (+ (* 100 (/ a 100)) (mod a 100))).
|
||||
(setq low (+ low (/ micro 1000000) (if (< micro 0) -1 0)))
|
||||
(setq micro (mod micro 1000000))
|
||||
(setq high (+ high (/ low 65536) (if (< low 0) -1 0)))
|
||||
(setq low (logand low 65535))
|
||||
|
||||
(list high low (and (/= micro 0) micro))))
|
||||
(let ((delta (if (floatp secs)
|
||||
(seconds-to-time secs)
|
||||
(list (floor secs 65536) (mod secs 65536)))))
|
||||
(if usecs
|
||||
(setq delta (time-add delta (list 0 0 usecs))))
|
||||
(time-add time delta)))
|
||||
|
||||
(defun timer--time-less-p (t1 t2)
|
||||
"Say whether time value T1 is less than time value T2."
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue