]> gitweb.factorcode.org Git - factor.git/commitdiff
lazy-lists: added llines for lazy lines from files
authorchris.double <chris.double@double.co.nz>
Mon, 18 Sep 2006 02:50:24 +0000 (02:50 +0000)
committerchris.double <chris.double@double.co.nz>
Mon, 18 Sep 2006 02:50:24 +0000 (02:50 +0000)
contrib/lazy-lists/lazy-io.factor

index b24e0424a9b2472db5d1b5b9296c8f9472dd38b2..967cfc7b6b2ca2479da9557e6d3edb27faefdb5e 100644 (file)
@@ -31,4 +31,34 @@ M: lazy-contents cdr ( lazy-contents -- cdr )
   ] if ;
 
 M: lazy-contents nil? ( lazy-contents -- bool )
-  car not ;
\ No newline at end of file
+  car not ;
+
+TUPLE: lazy-lines stream car cdr ;
+
+: llines ( stream -- result )
+  f f <lazy-lines> ;
+
+M: lazy-lines car ( lazy-lines -- car )
+  dup lazy-lines-car dup [
+    nip  
+  ] [ 
+    drop dup lazy-lines-stream stream-readln
+    swap dupd set-lazy-lines-car
+  ] if ;
+
+M: lazy-lines cdr ( lazy-lines -- cdr )
+  dup lazy-lines-cdr dup [
+    nip
+  ] [
+    drop dup
+    [ lazy-lines-stream ] keep
+    car [
+      llines [ swap set-lazy-lines-cdr ] keep
+    ] [
+      2drop nil
+    ] if 
+  ] if ;
+
+M: lazy-lines nil? ( lazy-lines -- bool )
+  car not ;
+