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