42 lines
1.4 KiB
Clojure
Executable File
42 lines
1.4 KiB
Clojure
Executable File
;; 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)
|