aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorStuart Sierra <mail@stuartsierra.com>2009-03-29 02:35:18 +0000
committerStuart Sierra <mail@stuartsierra.com>2009-03-29 02:35:18 +0000
commit29e62a7570d9144e013743a2fa0deaa7b7dd1fed (patch)
treeb47cdfddfe7183409f3df8f45dd5bedad261a071 /src
parent4c918164b55cf4287c53a3c7907389e81819ea7a (diff)
duck_streams.clj: added with-out-writer and with-in-reader
Diffstat (limited to 'src')
-rw-r--r--src/clojure/contrib/duck_streams.clj19
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)))