;;; -*- Mode: Scheme; scheme48-package: (config) -*- ;;;;;; Rendezvous Concurrency Abstraction ;;;;;; Scheme48 Package Definitions ;;; Copyright (c) 2005-2009, Taylor R. Campbell ;;; ;;; Redistribution and use in source and binary forms, with or without ;;; modification, are permitted provided that the following conditions ;;; are met: ;;; ;;; * Redistributions of source code must retain the above copyright ;;; notice, this list of conditions and the following disclaimer. ;;; ;;; * Redistributions in binary form must reproduce the above copyright ;;; notice, this list of conditions and the following disclaimer in ;;; the documentation and/or other materials provided with the ;;; distribution. ;;; ;;; * Neither the names of the authors nor the names of contributors ;;; may be used to endorse or promote products derived from this ;;; software without specific prior written permission. ;;; ;;; THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS ;;; OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ;;; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ;;; ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY ;;; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL ;;; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE ;;; GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS ;;; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, ;;; WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING ;;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ;;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. (define-structures ((rendezvous rendezvous-interface) (rendezvous-builder rendezvous-builder-interface)) (open scheme receiving srfi-9 ; define-record-type srfi-23 ; error define-synchronized-record-types variant-types suspensions time ; for timing rendezvous (subset threads-internal (register-dozer!)) ) (optimize auto-integrate) (files rendezvous s48-time)) (define-structure rendezvous-channels rendezvous-channels-interface (open scheme define-synchronized-record-types queues rendezvous rendezvous-builder ) (optimize auto-integrate) (files channel)) (define-structure rendezvous-mailboxes rendezvous-mailboxes-interface (open scheme define-synchronized-record-types queues receiving rendezvous rendezvous-builder ) (optimize auto-integrate) (files mailbox)) (define-structure rendezvous-placeholders rendezvous-placeholders-interface (open scheme define-synchronized-record-types signals rendezvous rendezvous-builder ) (optimize auto-integrate) (files placeholder)) (define-structure rendezvous-semaphores rendezvous-semaphores-interface (open scheme srfi-9 ; define-record-type variant-types queues threads rendezvous rendezvous-mailboxes rendezvous-channels rendezvous-placeholders ) (optimize auto-integrate) (files semaphore)) ;;;; Scheme Compatibility Interface (define-structure suspensions suspensions-interface (open scheme receiving define-record-types cells queues threads threads-internal low-proposals ) (optimize auto-integrate) (files s48-suspend)) (define-structure define-synchronized-record-types (export (define-synchronized-record-type :syntax)) (open scheme (modify proposals (rename (define-synchronized-record-type %define-synch-record-type))) ) (begin (define-syntax define-synchronized-record-type (syntax-rules () ((DEFINE-SYNCHRONIZED-RECORD-TYPE name . more) (%DEFINE-SYNCH-RECORD-TYPE name name . more)))) )) (define-structure variant-types (export (define-variant-type :syntax)) (open scheme record-types records ;; not ENUMERATED -- see definition of DEFINE-ENUMERATION & ;; ENUM in the code enum-case code-quote destructuring signals util ) (for-syntax (open scheme destructuring names )) (files s48-variant-type))