--- a/FilteringStream.st Fri Feb 18 15:40:57 2000 +0100
+++ b/FilteringStream.st Thu Mar 02 15:15:13 2000 +0100
@@ -1,6 +1,8 @@
+"{ Package: 'stx:goodies' }"
+
"
COPYRIGHT (c) 1996 by Claus Gittinger
- All Rights Reserved
+ All Rights Reserved
This software is furnished under a license and may be used
only in accordance with the terms of that license and with the
@@ -23,7 +25,7 @@
copyright
"
COPYRIGHT (c) 1996 by Claus Gittinger
- All Rights Reserved
+ All Rights Reserved
This software is furnished under a license and may be used
only in accordance with the terms of that license and with the
@@ -62,16 +64,16 @@
(a Transcript, a RandomNumber generator or even a Plug will do as well).
[instance variables:]
- inputStream <Stream> the stream from which elements are read
- outputStream <Stream> the stream to which elements are written
- filter <Block> the filter block;
- unbound <Boolean> if true, the stream is unbound.
+ inputStream <Stream> the stream from which elements are read
+ outputStream <Stream> the stream to which elements are written
+ filter <Block> the filter block;
+ unbound <Boolean> if true, the stream is unbound.
[author:]
- Claus Gittinger
+ Claus Gittinger
[See also:]
- ReadStream WriteStream
+ ReadStream WriteStream
"
!
@@ -83,17 +85,17 @@
buffer or to reinvent the read-loop:
(notice, a FilteringLineStream does this with less overhead,
due to the byte-wise reading done here)
- [exBegin]
+ [exBegin]
|in pusher|
in := 'Makefile' asFilename readStream.
pusher := FilteringStream readingFrom:in writingTo:Transcript.
pusher filterUpToEnd
- [exEnd]
+ [exEnd]
filter random numbers:
- [exBegin]
+ [exBegin]
|in filter|
in := Random new.
@@ -102,44 +104,44 @@
filter filter:[:num | ((num >= 0.5) and:[num <= 0.6]) ifTrue:[num] ifFalse:[nil]].
20 timesRepeat:[
- Transcript showCR:(filter next printString).
+ Transcript showCR:(filter next printString).
]
- [exEnd]
+ [exEnd]
filtering prime numbers:
- [exBegin]
+ [exBegin]
|num generator primeFilter addFilter|
num := 1.
generator := Plug new.
generator respondTo:#next
- with:[num := num + 1. num].
+ with:[num := num + 1. num].
generator respondTo:#atEnd
- with:[false].
+ with:[false].
addFilter := [:prime | |newFilter|
- newFilter := FilteringLineStream basicNew.
- newFilter filter:[:num | (num \\ prime) == 0 ifTrue:[
- nil
- ] ifFalse:[
- num
- ]
- ].
- newFilter inputStream:primeFilter.
- primeFilter := newFilter
+ newFilter := FilteringLineStream basicNew.
+ newFilter filter:[:num | (num \\ prime) == 0 ifTrue:[
+ nil
+ ] ifFalse:[
+ num
+ ]
+ ].
+ newFilter inputStream:primeFilter.
+ primeFilter := newFilter
].
addFilter value:2.
primeFilter inputStream:generator.
10000 timesRepeat:[
- |nextPrime|
+ |nextPrime|
- nextPrime := primeFilter next.
- addFilter value:nextPrime.
- Transcript showCR:nextPrime.
+ nextPrime := primeFilter next.
+ addFilter value:nextPrime.
+ Transcript showCR:nextPrime.
]
- [exEnd]
+ [exEnd]
"
@@ -207,7 +209,7 @@
push it filtered into the outputStream."
[inputStream atEnd] whileFalse:[
- self nextPut:(inputStream next)
+ self nextPut:(inputStream next)
].
"Created: 2.7.1996 / 21:06:42 / cg"
@@ -224,24 +226,24 @@
"/ (see #atEnd)
readAhead notNil ifTrue:[
- input := readAhead.
- readAhead := nil.
- ^ input
+ input := readAhead.
+ readAhead := nil.
+ ^ input
].
[inputStream atEnd] whileFalse:[
- "/ get an element
- input := inputStream next.
- filter isNil ifTrue:[
- ^ input
- ].
+ "/ get an element
+ input := inputStream next.
+ filter isNil ifTrue:[
+ ^ input
+ ].
- "/ filter it - this may return nil, to eat it
- output := filter value:input.
- output notNil ifTrue:[
- "/ good - output it
- ^ output.
- ].
+ "/ filter it - this may return nil, to eat it
+ output := filter value:input.
+ output notNil ifTrue:[
+ "/ good - output it
+ ^ output.
+ ].
].
^ nil
@@ -258,12 +260,12 @@
"/ filter it
filter isNil ifTrue:[
- outputStream nextPut:something
+ outputStream nextPut:something
] ifFalse:[
- output := filter value:something.
- output notNil ifTrue:[
- outputStream nextPut:output
- ]
+ output := filter value:something.
+ output notNil ifTrue:[
+ outputStream nextPut:output
+ ]
]
"Modified: 11.1.1997 / 16:12:52 / cg"
@@ -331,7 +333,7 @@
"when I am closed, close my input - if any"
inputStream notNil ifTrue:[
- inputStream close
+ inputStream close
]
"Created: 11.1.1997 / 15:27:17 / cg"
@@ -347,8 +349,8 @@
readAhead notNil ifTrue:[^ false].
filter isNil ifTrue:[
- "/ then, its easy
- ^ inputStream atEnd
+ "/ then, its easy
+ ^ inputStream atEnd
].
"/ with a filter, things are more complicated,
@@ -356,9 +358,9 @@
[inputStream atEnd] whileFalse:[
- nextElement := inputStream next.
- readAhead := filter value:nextElement.
- readAhead notNil ifTrue:[^ false].
+ nextElement := inputStream next.
+ readAhead := filter value:nextElement.
+ readAhead notNil ifTrue:[^ false].
].
^ true
@@ -378,5 +380,5 @@
!FilteringStream class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libbasic2/FilteringStream.st,v 1.5 1997-01-11 18:55:14 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic2/FilteringStream.st,v 1.6 2000-03-02 14:15:08 cg Exp $'
! !