diff options
author | Stuart Sierra <mail@stuartsierra.com> | 2009-03-29 02:35:18 +0000 |
---|---|---|
committer | Stuart Sierra <mail@stuartsierra.com> | 2009-03-29 02:35:18 +0000 |
commit | 29e62a7570d9144e013743a2fa0deaa7b7dd1fed (patch) | |
tree | b47cdfddfe7183409f3df8f45dd5bedad261a071 /src | |
parent | 4c918164b55cf4287c53a3c7907389e81819ea7a (diff) |
duck_streams.clj: added with-out-writer and with-in-reader
Diffstat (limited to 'src')
-rw-r--r-- | src/clojure/contrib/duck_streams.clj | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/src/clojure/contrib/duck_streams.clj b/src/clojure/contrib/duck_streams.clj index 781449f1..ed5853f9 100644 --- a/src/clojure/contrib/duck_streams.clj +++ b/src/clojure/contrib/duck_streams.clj @@ -41,7 +41,7 @@ (ns clojure.contrib.duck-streams (:import - (java.io Reader InputStream InputStreamReader + (java.io Reader InputStream InputStreamReader PushbackReader BufferedReader File PrintWriter OutputStream OutputStreamWriter BufferedWriter Writer FileInputStream FileOutputStream) @@ -155,7 +155,6 @@ (throw (Exception. (str "Cannot open <" (pr-str x) "> as a writer.")))) - (defn write-lines "Writes lines (a seq) to f, separated by newlines. f is opened with writer." @@ -201,3 +200,19 @@ Note: In Java, you cannot change the current working directory." [] (System/getProperty "user.dir")) + + + +(defmacro with-out-writer + "Opens a writer on f, binds it to *out*, and evalutes body." + [f & body] + `(with-open [stream# (writer ~f)] + (binding [*out* stream#] + ~@body))) + +(defmacro with-in-reader + "Opens a PushbackReader on f, binds it to *in*, and evaluates body." + [f & body] + `(with-open [stream# (PushbackReader. (reader ~f))] + (binding [*in* stream#] + ~@body))) |