syndicate-rkt/syndicate/distributed/buffer.rkt

18 lines
457 B
Racket

; SPDX-License-Identifier: LGPL-3.0-or-later
; Copyright (C) 2010-2021 Tony Garnock-Jones <tonygarnockjones@gmail.com>
#lang syndicate
(provide make-buffer)
(define (make-buffer)
(field [pending '()])
(define (push item)
(pending (cons item (pending))))
(define (drain handler)
(begin/dataflow
(when (pair? (pending))
(for [(item (in-list (reverse (pending))))] (handler item))
(pending '()))))
(values push drain))