job-specifier: Rewrite 'bump-time'.
* src/mcron/job-specifier.scm (bump-time): Use 'match'.
This commit is contained in:
parent
ae6deb8ea2
commit
ea2058f14a
1 changed files with 27 additions and 28 deletions
|
|
@ -62,36 +62,35 @@ go into the list. For example, (range 1 6 2) returns '(1 3 5)."
|
||||||
(if (> time current) (min time closest+) closest+)
|
(if (> time current) (min time closest+) closest+)
|
||||||
rest)))))
|
rest)))))
|
||||||
|
|
||||||
;; Internal function to return the time corresponding to some near future
|
|
||||||
;; hour. If hour-list is not supplied, the time returned corresponds to the
|
|
||||||
;; start of the next hour of the day.
|
|
||||||
;;
|
|
||||||
;; If the hour-list is supplied the time returned corresponds to the first hour
|
|
||||||
;; of the day in the future which is contained in the list. If all the values in
|
|
||||||
;; the list are less than the current hour, then the time returned will
|
|
||||||
;; correspond to the first hour in the list *on the following day*.
|
|
||||||
;;
|
|
||||||
;; ... except that the function is actually generalized to deal with seconds,
|
|
||||||
;; minutes, etc., in an obvious way :-)
|
|
||||||
;;
|
|
||||||
;; Note that value-list always comes from an optional argument to a procedure,
|
|
||||||
;; so is wrapped up as the first element of a list (i.e. it is a list inside a
|
|
||||||
;; list).
|
|
||||||
|
|
||||||
(define (bump-time time value-list component higher-component
|
(define (bump-time time value-list component higher-component
|
||||||
set-component! set-higher-component!)
|
set-component! set-higher-component!)
|
||||||
(if (null? value-list)
|
;; Return the time corresponding to some near future hour. If hour-list is
|
||||||
(set-component! time (+ (component time) 1))
|
;; not supplied, the time returned corresponds to the start of the next hour
|
||||||
(let ((best-next (%find-best-next (component time) (car value-list))))
|
;; of the day.
|
||||||
(if (inf? (cdr best-next))
|
;;
|
||||||
(begin
|
;; If the hour-list is supplied the time returned corresponds to the first
|
||||||
(set-higher-component! time (+ (higher-component time) 1))
|
;; hour of the day in the future which is contained in the list. If all the
|
||||||
(set-component! time (car best-next)))
|
;; values in the list are less than the current hour, then the time returned
|
||||||
(set-component! time (cdr best-next)))))
|
;; will correspond to the first hour in the list *on the following day*.
|
||||||
(car (mktime time)))
|
;;
|
||||||
|
;; ... except that the function is actually generalized to deal with
|
||||||
|
;; seconds, minutes, etc., in an obvious way :-)
|
||||||
|
;;
|
||||||
|
;; Note that value-list always comes from an optional argument to a
|
||||||
|
;; procedure, so is wrapped up as the first element of a list (i.e. it is a
|
||||||
|
;; list inside a list).
|
||||||
|
(match value-list
|
||||||
|
(()
|
||||||
|
(set-component! time (1+ (component time))))
|
||||||
|
((val . rest)
|
||||||
|
(match (%find-best-next (component time) val)
|
||||||
|
((smallest . closest+)
|
||||||
|
(cond ((inf? closest+)
|
||||||
|
(set-higher-component! time (1+ (higher-component time)))
|
||||||
|
(set-component! time smallest))
|
||||||
|
(else
|
||||||
|
(set-component! time closest+)))))))
|
||||||
|
(first (mktime time)))
|
||||||
|
|
||||||
;; Set of configuration methods which use the above general function to bump
|
;; Set of configuration methods which use the above general function to bump
|
||||||
;; specific components of time to the next legitimate value. In each case, all
|
;; specific components of time to the next legitimate value. In each case, all
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue