]> gitweb.factorcode.org Git - factor.git/commitdiff
replace boolean with singletons for io.streams.limited -- stream-throws or stream...
authorU-C4\Administrator <Administrator@k.(none)>
Tue, 20 Jan 2009 18:02:54 +0000 (12:02 -0600)
committerU-C4\Administrator <Administrator@k.(none)>
Tue, 20 Jan 2009 18:02:54 +0000 (12:02 -0600)
basis/io/streams/limited/limited-tests.factor
basis/io/streams/limited/limited.factor

index 11b93e62a54ea6a3e460ef1dbacd1e1dea0c56a1..69bd6a9cd6c022ab33d4a55d239f3ab922d44af0 100644 (file)
@@ -44,12 +44,12 @@ IN: io.streams.limited.tests
 
 [ "abc" ]
 [
-    "abc" <string-reader> 3 <limited-stream> t >>no-throw?
+    "abc" <string-reader> 3 <limited-stream> stream-eofs >>mode
     4 swap stream-read
 ] unit-test
 
 [ f ]
 [
-    "abc" <string-reader> 3 <limited-stream> t >>no-throw?
+    "abc" <string-reader> 3 <limited-stream> stream-eofs >>mode
     4 over stream-read drop 10 swap stream-read
 ] unit-test
index 505fe792194f4c1603017d3082252eebaa5ef1a1..339dd9f62d51bb3fa094863d9da722e83af17dad 100755 (executable)
@@ -1,16 +1,19 @@
 ! Copyright (C) 2008 Slava Pestov
 ! See http://factorcode.org/license.txt for BSD license.
 USING: kernel math io io.encodings destructors accessors
-sequences namespaces byte-vectors fry ;
+sequences namespaces byte-vectors fry combinators ;
 IN: io.streams.limited
 
-TUPLE: limited-stream stream count limit no-throw? ;
+TUPLE: limited-stream stream count limit mode ;
+
+SINGLETONS: stream-throws stream-eofs ;
 
 : <limited-stream> ( stream limit -- stream' )
     limited-stream new
         swap >>limit
         swap >>stream
-        0 >>count ;
+        0 >>count
+        stream-throws >>mode ;
 
 GENERIC# limit 1 ( stream limit -- stream' )
 
@@ -22,16 +25,20 @@ M: object limit <limited-stream> ;
 
 ERROR: limit-exceeded ;
 
+ERROR: bad-stream-mode mode ;
+
 : adjust-limit ( n stream -- n' stream )
     2dup [ + ] change-count
     [ count>> ] [ limit>> ] bi >
     [
-        dup no-throw?>> [
-            dup [ count>> ] [ limit>> ] bi -
-            '[ _ - ] dip
-        ] [
-            limit-exceeded
-        ] if
+        dup mode>> {
+            { stream-throws [ limit-exceeded ] }
+            { stream-eofs [ 
+                dup [ count>> ] [ limit>> ] bi -
+                '[ _ - ] dip
+            ] }
+            [ bad-stream-mode ]
+        } case
     ] when ; inline
 
 : maybe-read ( n limited-stream quot: ( n stream -- seq/f ) -- seq/f )