;; Copyright (c) Rich Hickey and contributors. All rights reserved. ;; The use and distribution terms for this software are covered by the ;; Eclipse Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php) ;; which can be found in the file epl-v10.html at the root of this distribution. ;; By using this software in any fashion, you are agreeing to be bound by ;; the terms of this license. ;; You must not remove this notice, or any other, from this software. (ns cljs.core.async.impl.protocols) (def ^:const MAX-QUEUE-SIZE 1024) (defprotocol ReadPort (take! [port fn1-handler] "derefable val if taken, nil if take was enqueued")) (defprotocol WritePort (put! [port val fn1-handler] "derefable boolean (false if already closed) if handled, nil if put was enqueued. Must throw on nil val.")) (defprotocol Channel (close! [chan]) (closed? [chan])) (defprotocol Handler (active? [h] "returns true if has callback. Must work w/o lock") #_(lock-id [h] "a unique id for lock acquisition order, 0 if no lock") (commit [h] "commit to fulfilling its end of the transfer, returns cb. Must be called within lock")) (defprotocol Buffer (full? [b]) (remove! [b]) (add!* [b itm])) (defn add! ([b] b) ([b itm] (assert (not (nil? itm))) (add!* b itm))) ;; Defines a buffer that will never block (return true to full?) (defprotocol UnblockingBuffer)