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))))