Mercurial > hg > jslab
diff src/scheme/streams.scm @ 0:bf79fb79ee13
Initial Mercurial check in.
author | samer |
---|---|
date | Tue, 17 Jan 2012 17:50:20 +0000 |
parents | |
children | 5df24c91468d |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/scheme/streams.scm Tue Jan 17 17:50:20 2012 +0000 @@ -0,0 +1,43 @@ +(define (ifstream fn) (java.io.FileInputStream. fn)) +(define (ofstream fn) (java.io.FileOutputStream. fn)) +(define (fwriter fn) (java.io.FileWriter. fn)) +(define (freader fn) (java.io.FileReader. fn)) + +(define-method (buffer (in java.io.InputStream)) (java.io.BufferedInputStream. in)) +(define-method (buffer (out java.io.OutputStream)) (java.io.BufferedOutputStream. out)) +(define-method (buffer (in java.io.Reader)) (java.io.BufferedReader. in)) +(define-method (buffer (out java.io.Writer)) (java.io.BufferedWriter. out)) + +(define (make-pipe) + (define writer (java.io.PipedOutputStream.)) + (define reader (java.io.PipedInputStream. writer)) + (list writer reader) +) + +(define-method (send (pipe Pair) (x Vec)) (VecToStream. x (first pipe))) +(define-method (recv (pipe Pair) (x Vec)) (StreamToVec. x (second pipe))) +(define-method (send (pipe Pair) (x DoubleModel)) (SignalToStream. x (first pipe))) +(define-method (recv (pipe Pair) (x DoubleModel)) (StreamToDouble. x (second pipe))) + +(define (with-infile fname proc) + (let* ( (f (ifstream fname)) + (rc (proc f))) + (.close f) rc)) + +(define (with-outfile fname proc) + (let* ( (f (ofstream fname)) + (rc (proc f))) + (.close f) rc)) + +(define (with thing proc) + (let ((rc (proc thing))) + (.close thing) rc)) + +(define (oostream s) (java.io.ObjectOutputStream. s)) +(define (iostream s) (java.io.ObjectInputStream. s)) + + +;; convert saveable from binary to text +(define (totext thing file txtfile) + (with (ifstream file) (lambda (f) (.load thing f))) + (with (fwriter txtfile) (lambda (f) (.write thing f))))