@Meikel: I am now convinced that you are right. It's clear to me that I completely underestimated the power / flexibility of the Channel abastraction.
@World: I now retract my second-ing of "adding count to Protocol of Channel" On Fri, Jan 17, 2014 at 2:10 AM, Meikel Brandmeyer (kotarak) <[email protected]>wrote: > Hi again, > > and some more golfing by Christophe: > > (defn queue-process-uncontrolled > [input output stats] > (async/go > (loop [q clojure.lang.PersistentQueue/EMPTY] > (let [[val-to-q ch] (async/alts! > (if-let [v (peek q)] > [input [output v]] > [input]))] > (swap! stats update-stats-as-you-see-fit q) > (cond > ; Read a value from input. > val-to-q (recur (conj q val-to-q)) > ; Input channel is closed. => drain queue. > (identical? ch input) (doseq [v q] (async/>! output v)) > > ; Write happened. > :else (recur (pop q))))) > > (defn queue-process-controlled > [input stats] > (let [output (async/chan) > process (queue-process-uncontrolled input output stats)] > (async/go > (<! process) > (async/close! output)) > output)) > > > Plus an improvement for the closing of the output channel. > queue-process-uncontrolled is not necessarily the master of the channel. > > Meikel > > -- > -- > You received this message because you are subscribed to the Google > Groups "Clojure" group. > To post to this group, send email to [email protected] > Note that posts from new members are moderated - please be patient with > your first post. > To unsubscribe from this group, send email to > [email protected] > For more options, visit this group at > http://groups.google.com/group/clojure?hl=en > --- > You received this message because you are subscribed to the Google Groups > "Clojure" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > For more options, visit https://groups.google.com/groups/opt_out. > -- -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to [email protected] Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/groups/opt_out.
