X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=loopy.scm;h=1c26a2f3b211a31d48c4746e70edd6901c31b4de;hb=ceed07c211d0ca9812bf36eff48a2692edc7b5eb;hp=8c216eeb7d1dd509d50846b76bf6ca510c682c4d;hpb=f04065ae644b415fdf14564aec4be0c6f6189988;p=8sync.git diff --git a/loopy.scm b/loopy.scm index 8c216ee..1c26a2f 100644 --- a/loopy.scm +++ b/loopy.scm @@ -87,6 +87,8 @@ (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)) @@ -307,36 +309,6 @@ Will produce (0 . 0) instead of a negative number, if needed." segments)) - -;;; 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))) - - ;;; Request to run stuff ;;; ==================== @@ -381,6 +353,7 @@ Will produce (0 . 0) instead of a negative number, if needed." (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) @@ -459,6 +432,8 @@ Will produce (0 . 0) instead of a negative number, if needed." #: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