(except-port-map (make-hash-table))
(schedule (make-schedule))
(time (gettimeofday)))
+ ;; TODO: document arguments
+ "Make a fresh agenda."
(make-agenda-intern queue prompt
read-port-map write-port-map except-port-map
schedule time))
segments))
-\f
-;;; Port handling
-;;; =============
-
-(define (make-port-mapping)
- (make-hash-table))
-
-(define* (port-mapping-set! port-mapping port #:optional read write except)
- "Sets port-mapping for reader / writer / exception handlers"
- (if (not (or read write except))
- (throw 'no-handlers-given "No handlers given for port" port))
- (hashq-set! port-mapping port
- `#(,read ,write ,except)))
-
-(define (port-mapping-remove! port-mapping port)
- (hashq-remove! port-mapping port))
-
-;; TODO: This is O(n), I'm pretty sure :\
-;; ... it might be worthwhile for us to have a
-;; port-mapping record that keeps a count of how many
-;; handlers (maybe via a promise?)
-(define (port-mapping-empty? port-mapping)
- "Is this port mapping empty?"
- (eq? (hash-count (const #t) port-mapping) 0))
-
-(define (port-mapping-non-empty? port-mapping)
- "Whether this port-mapping contains any elements"
- (not (port-mapping-empty? port-mapping)))
-
-
\f
;;; Request to run stuff
;;; ====================
(define %current-agenda (make-parameter #f))
(define (update-agenda-from-select! agenda)
+ "Potentially (select) on ports specified in agenda, adding items to queue"
(define (hash-keys hash)
(hash-map->list (lambda (k v) k) hash))
(define (get-wait-time)
#:key stop-condition
(get-time gettimeofday)
(handle-ports update-agenda-from-select!))
+ ;; TODO: Document fields
+ "Start up the AGENDA"
(let loop ((agenda agenda))
(let ((agenda
;; @@: Hm, maybe here would be a great place to handle