Skip to content

Commit

Permalink
Getting rid of macros that are no longer needed (feels goood...)
Browse files Browse the repository at this point in the history
  • Loading branch information
roman committed Feb 18, 2012
1 parent 60c4f03 commit 7ba4059
Show file tree
Hide file tree
Showing 2 changed files with 1 addition and 70 deletions.
67 changes: 1 addition & 66 deletions src/river/core.clj
Expand Up @@ -151,79 +151,14 @@
]
(produce-eof (reduce redux more))))

(defn- ensure-in-list [producer-or-filter]
(if (seq? producer-or-filter)
producer-or-filter
(list producer-or-filter)))

(defn- nest-producer-filter-consumer
([consumers] consumers)
([producer-or-filter0 & more]
(let [producer-or-filter (ensure-in-list producer-or-filter0)]
; when last item is a vector (multiple consumers),
; we just concat that to the producer/filter.
;
; This feature is being used currently zip* filter
(if (and (nil? (next more))
(vector? (first more)))

(concat producer-or-filter
(first more))

(concat producer-or-filter
`(~(apply nest-producer-filter-consumer more)))))))

(defn gen-producer [& producer+filters-fn]
"Composes a seq of partially applied producers/filters, and returns a
new producer that receives either a producer, filter or consumer.
Usage:
> (def new-producer (gen-producer #(produce-seq (range 10 20) %)
> #(produce-seq (range 1 10) %)
> #(filter* even? %))"
(fn composed-producer [consumer0]
(reduce
(fn [consumer producer+filter]
(producer+filter consumer))
consumer0
(reverse producer+filters-fn))))


(defmacro gen-producer> [& producers+filters]
"Composes a seq of producers and filters, and returns a new
producer that receives either a new producer, filter or consumer.
Usage:
> (def new-producer (gen-producer> (produce-seq (range 10 20))
> (produce-seq (range 1 10))
> (filter* even?)))"
`(fn composed-producer [~'consumer]
~(apply nest-producer-filter-consumer
(concat producers+filters `(~'consumer)))))

(defmacro run>
"Works the same way as river/run, its purpose is to ease the building
of compositions between producers, filters and consumers by allowing
to specify all of them without nesting one into the other.
With river/run:
> (river/run (producer2 (producer1 (filter1 (filter2 consumer)))))
With river/run>:
> (river/run> producer2 producer1 filter1 filter2 consumer)"
[& more]
`(run ~(apply nest-producer-filter-consumer more)))

(defmacro do-consumer [steps result]
"Binds the river-m monadic implementation to the domonad macro,
check clojure.algo.monads/domonad for further info."
`(monad/domonad river-m ~steps ~result))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; Filters...
;; Filters
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Expand Down
4 changes: 0 additions & 4 deletions src/river/io.clj
Expand Up @@ -4,14 +4,10 @@
:author "Roman Gonzalez"
}

;; Standard Lib ;;;;

(:require [clojure.java.io :as io])
(:import [java.io LineNumberReader
FileInputStream])

;; Local Lib ;;;;;;;

(:use river.core)
(:use [river.seq :only
[produce-generate]]))
Expand Down

0 comments on commit 7ba4059

Please sign in to comment.