diff options
author | David Thompson <dthompson2@worcester.edu> | 2018-11-29 16:26:48 -0500 |
---|---|---|
committer | David Thompson <dthompson2@worcester.edu> | 2018-11-29 16:30:55 -0500 |
commit | fb8f3bcd6cec02243098ec60838ce0a7778aff38 (patch) | |
tree | 85fadec487084f4c8bfe7ff9c6c31a6e6f8ef111 /chickadee | |
parent | 1afab11233de20272bdc029e70a5e1dcfd17218e (diff) |
scripting: channel: Add channel-get! and channel-put! procedures.
* chickadee/scripting/channel.scm (channel-get!, channel-put!): New
procedures.
* doc/api.texi [Channels]: Add docs.
Diffstat (limited to 'chickadee')
-rw-r--r-- | chickadee/scripting/channel.scm | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/chickadee/scripting/channel.scm b/chickadee/scripting/channel.scm index 4d8583f..7ec11ce 100644 --- a/chickadee/scripting/channel.scm +++ b/chickadee/scripting/channel.scm @@ -23,7 +23,9 @@ #:use-module (chickadee scripting script) #:export (make-channel channel? + channel-get! channel-get + channel-put! channel-put)) ;; A very simplified notion of channels compared to guile-fibers. In @@ -55,18 +57,30 @@ (get-cont data) (put-cont))))))) +(define (channel-get! channel proc) + "Asynchronously retrieve a value from CHANNEL and call PROC with +that value." + (enqueue! (channel-get-queue channel) proc) + (maybe-deliver channel)) + (define (channel-get channel) "Retrieve a value from CHANNEL. The current script suspends until a value is available." (yield (lambda (cont) - (enqueue! (channel-get-queue channel) cont) - (maybe-deliver channel)))) + (channel-get! channel cont)))) + +(define noop (lambda () #t)) + +(define* (channel-put! channel data #:optional (thunk noop)) + "Asynchronously send DATA to CHANNEL and call THUNK after it has +been received." + (enqueue! (channel-put-queue channel) (cons data thunk)) + (maybe-deliver channel)) (define (channel-put channel data) "Send DATA to CHANNEL. The current script suspends until another script is available to retrieve the value." (yield (lambda (cont) - (enqueue! (channel-put-queue channel) (cons data cont)) - (maybe-deliver channel)))) + (channel-put! channel data cont)))) |