Created
March 1, 2013 15:46
-
-
Save cgrand/5065503 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
=> (defn line-seq [^java.io.BufferedReader rdr sep] | |
(let [sep (str sep) | |
buf (char-array 1024) | |
sb (StringBuilder.)] | |
((fn f [m] | |
(lazy-seq | |
(let [n (.read rdr buf 0 1024)] | |
(if (neg? n) | |
(when (pos? (.length sb)) | |
(list (str sb))) | |
(let [_ (.append sb buf 0 n) | |
n (.indexOf sb sep m) | |
s (.substring sb 0 n) | |
_ (.delete sb 0 (+ n (count sep)))] | |
(cons s (f (.length sb))) | |
))))) 0))) | |
WARNING: line-seq already refers to: #'clojure.core/line-seq in namespace: simple-webapp.core, being replaced by: #'simple-webapp.core/line-seq | |
#'simple-webapp.core/line-seq | |
=> (line-seq (java.io.StringReader. "Hello my dera friend") " ") | |
ClassCastException java.io.StringReader cannot be cast to java.io.BufferedReader simple-webapp.core/line-seq/f--5955/fn--5956 (NO_SOURCE_FILE:7) | |
=> (line-seq (java.io.BufferedReader. (java.io.StringReader. "Hello my dera friend")) " ") | |
("Hello" "my dera friend") | |
=> (defn line-seq [^java.io.BufferedReader rdr sep] | |
(let [sep (str sep) | |
buf (char-array 1024) | |
sb (StringBuilder.)] | |
((fn f [m] | |
(lazy-seq | |
(if (< m (.length sb)) | |
(let [n (.indexOf sb sep m)] | |
(if (neg? n) | |
(f (.length sb)) | |
(let [s (.substring sb 0 n)] | |
(.delete sb 0 (+ n (count sep))) | |
(cons s (f 0))))) | |
(let [n (.read rdr buf 0 1024)] | |
(if (neg? n) | |
(when (pos? (.length sb)) | |
(list (str sb))) | |
(f (.length (.append sb buf 0 n)))))))) 0))) | |
#'simple-webapp.core/line-seq | |
=> (line-seq (java.io.BufferedReader. (java.io.StringReader. "Hello my dera friend")) " ") | |
("Hello my dera friend") | |
=> (defn line-seq [^java.io.BufferedReader rdr sep] | |
(let [sep (str sep) | |
buf (char-array 1024) | |
sb (StringBuilder.)] | |
((fn f [m] | |
(lazy-seq | |
(if (< m (.length sb)) | |
(let [n (.indexOf sb sep m)] | |
(if (neg? n) | |
(f (.length sb)) | |
(let [s (.substring sb 0 n)] | |
(.delete sb 0 (+ n (count sep))) | |
(cons s (f 0))))) | |
(let [n (.read rdr buf 0 1024)] | |
(if (neg? n) | |
(when (pos? (.length sb)) | |
(list (str sb))) | |
(do | |
(.append sb buf 0 n) | |
(f m))))))) 0))) | |
#'simple-webapp.core/line-seq | |
=> (line-seq (java.io.BufferedReader. (java.io.StringReader. "Hello my dera friend")) " ") | |
("Hello" "my" "dera" "friend") | |
=> (line-seq (java.io.BufferedReader. (java.io.StringReader. "Hello my dear friend")) " ") | |
("Hello" "my" "dear" "friend") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment