FilteringStream.st
author Claus Gittinger <cg@exept.de>
Thu, 02 Mar 2000 15:15:13 +0100
changeset 885 c31412b26306
parent 479 9653144c97b4
child 889 b3bfa0862f55
permissions -rw-r--r--
package-definitions fixed/updated
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
885
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
     1
"{ Package: 'stx:goodies' }"
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
     2
472
33f423823933 commentary & doc
Claus Gittinger <cg@exept.de>
parents: 401
diff changeset
     3
"
33f423823933 commentary & doc
Claus Gittinger <cg@exept.de>
parents: 401
diff changeset
     4
 COPYRIGHT (c) 1996 by Claus Gittinger
885
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
     5
	      All Rights Reserved
472
33f423823933 commentary & doc
Claus Gittinger <cg@exept.de>
parents: 401
diff changeset
     6
33f423823933 commentary & doc
Claus Gittinger <cg@exept.de>
parents: 401
diff changeset
     7
 This software is furnished under a license and may be used
33f423823933 commentary & doc
Claus Gittinger <cg@exept.de>
parents: 401
diff changeset
     8
 only in accordance with the terms of that license and with the
33f423823933 commentary & doc
Claus Gittinger <cg@exept.de>
parents: 401
diff changeset
     9
 inclusion of the above copyright notice.   This software may not
33f423823933 commentary & doc
Claus Gittinger <cg@exept.de>
parents: 401
diff changeset
    10
 be provided or otherwise made available to, or used by, any
33f423823933 commentary & doc
Claus Gittinger <cg@exept.de>
parents: 401
diff changeset
    11
 other person.  No title to or ownership of the software is
33f423823933 commentary & doc
Claus Gittinger <cg@exept.de>
parents: 401
diff changeset
    12
 hereby transferred.
33f423823933 commentary & doc
Claus Gittinger <cg@exept.de>
parents: 401
diff changeset
    13
"
33f423823933 commentary & doc
Claus Gittinger <cg@exept.de>
parents: 401
diff changeset
    14
33f423823933 commentary & doc
Claus Gittinger <cg@exept.de>
parents: 401
diff changeset
    15
401
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
Stream subclass:#FilteringStream
477
6124ae485dbd need readAhead
Claus Gittinger <cg@exept.de>
parents: 474
diff changeset
    17
	instanceVariableNames:'inputStream outputStream filter readAhead'
401
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
	classVariableNames:''
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
	poolDictionaries:''
474
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
    20
	category:'Streams-Misc'
401
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
!
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
472
33f423823933 commentary & doc
Claus Gittinger <cg@exept.de>
parents: 401
diff changeset
    23
!FilteringStream class methodsFor:'documentation'!
33f423823933 commentary & doc
Claus Gittinger <cg@exept.de>
parents: 401
diff changeset
    24
33f423823933 commentary & doc
Claus Gittinger <cg@exept.de>
parents: 401
diff changeset
    25
copyright
33f423823933 commentary & doc
Claus Gittinger <cg@exept.de>
parents: 401
diff changeset
    26
"
33f423823933 commentary & doc
Claus Gittinger <cg@exept.de>
parents: 401
diff changeset
    27
 COPYRIGHT (c) 1996 by Claus Gittinger
885
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
    28
	      All Rights Reserved
472
33f423823933 commentary & doc
Claus Gittinger <cg@exept.de>
parents: 401
diff changeset
    29
33f423823933 commentary & doc
Claus Gittinger <cg@exept.de>
parents: 401
diff changeset
    30
 This software is furnished under a license and may be used
33f423823933 commentary & doc
Claus Gittinger <cg@exept.de>
parents: 401
diff changeset
    31
 only in accordance with the terms of that license and with the
33f423823933 commentary & doc
Claus Gittinger <cg@exept.de>
parents: 401
diff changeset
    32
 inclusion of the above copyright notice.   This software may not
33f423823933 commentary & doc
Claus Gittinger <cg@exept.de>
parents: 401
diff changeset
    33
 be provided or otherwise made available to, or used by, any
33f423823933 commentary & doc
Claus Gittinger <cg@exept.de>
parents: 401
diff changeset
    34
 other person.  No title to or ownership of the software is
33f423823933 commentary & doc
Claus Gittinger <cg@exept.de>
parents: 401
diff changeset
    35
 hereby transferred.
33f423823933 commentary & doc
Claus Gittinger <cg@exept.de>
parents: 401
diff changeset
    36
"
33f423823933 commentary & doc
Claus Gittinger <cg@exept.de>
parents: 401
diff changeset
    37
33f423823933 commentary & doc
Claus Gittinger <cg@exept.de>
parents: 401
diff changeset
    38
!
33f423823933 commentary & doc
Claus Gittinger <cg@exept.de>
parents: 401
diff changeset
    39
33f423823933 commentary & doc
Claus Gittinger <cg@exept.de>
parents: 401
diff changeset
    40
documentation
33f423823933 commentary & doc
Claus Gittinger <cg@exept.de>
parents: 401
diff changeset
    41
"
33f423823933 commentary & doc
Claus Gittinger <cg@exept.de>
parents: 401
diff changeset
    42
    A FilteringStream can be connected to some input
33f423823933 commentary & doc
Claus Gittinger <cg@exept.de>
parents: 401
diff changeset
    43
    (from which elements are read via the ReadStream protocol),
33f423823933 commentary & doc
Claus Gittinger <cg@exept.de>
parents: 401
diff changeset
    44
    and/or to some output (to which elements are written via
33f423823933 commentary & doc
Claus Gittinger <cg@exept.de>
parents: 401
diff changeset
    45
    the WriteStream protocol.
477
6124ae485dbd need readAhead
Claus Gittinger <cg@exept.de>
parents: 474
diff changeset
    46
6124ae485dbd need readAhead
Claus Gittinger <cg@exept.de>
parents: 474
diff changeset
    47
    The FilteringStream itself performs filtering/processing
6124ae485dbd need readAhead
Claus Gittinger <cg@exept.de>
parents: 474
diff changeset
    48
    on the elements as they arrive, optionally suppressing
6124ae485dbd need readAhead
Claus Gittinger <cg@exept.de>
parents: 474
diff changeset
    49
    elements.
6124ae485dbd need readAhead
Claus Gittinger <cg@exept.de>
parents: 474
diff changeset
    50
6124ae485dbd need readAhead
Claus Gittinger <cg@exept.de>
parents: 474
diff changeset
    51
    A FilteringStream can be operated in pull-mode, by asking
6124ae485dbd need readAhead
Claus Gittinger <cg@exept.de>
parents: 474
diff changeset
    52
    it for the next element; it will then ask its inputStream for
6124ae485dbd need readAhead
Claus Gittinger <cg@exept.de>
parents: 474
diff changeset
    53
    and element, process it and return it.
472
33f423823933 commentary & doc
Claus Gittinger <cg@exept.de>
parents: 401
diff changeset
    54
477
6124ae485dbd need readAhead
Claus Gittinger <cg@exept.de>
parents: 474
diff changeset
    55
    Or, in pushMode, by having someone else writing elements via
6124ae485dbd need readAhead
Claus Gittinger <cg@exept.de>
parents: 474
diff changeset
    56
    nextPut:; it will then process the element, and send it to its 
6124ae485dbd need readAhead
Claus Gittinger <cg@exept.de>
parents: 474
diff changeset
    57
    output stream.
6124ae485dbd need readAhead
Claus Gittinger <cg@exept.de>
parents: 474
diff changeset
    58
6124ae485dbd need readAhead
Claus Gittinger <cg@exept.de>
parents: 474
diff changeset
    59
    Mixing modes does not make sense, since if pulled, data will not
6124ae485dbd need readAhead
Claus Gittinger <cg@exept.de>
parents: 474
diff changeset
    60
    be written to the outputStream (unless the puller does it).
6124ae485dbd need readAhead
Claus Gittinger <cg@exept.de>
parents: 474
diff changeset
    61
6124ae485dbd need readAhead
Claus Gittinger <cg@exept.de>
parents: 474
diff changeset
    62
    The connected streams need not be real streams; anything which
6124ae485dbd need readAhead
Claus Gittinger <cg@exept.de>
parents: 474
diff changeset
    63
    responds to the basic Stream protocol can be connected
6124ae485dbd need readAhead
Claus Gittinger <cg@exept.de>
parents: 474
diff changeset
    64
    (a Transcript, a RandomNumber generator or even a Plug will do as well).
472
33f423823933 commentary & doc
Claus Gittinger <cg@exept.de>
parents: 401
diff changeset
    65
33f423823933 commentary & doc
Claus Gittinger <cg@exept.de>
parents: 401
diff changeset
    66
    [instance variables:]
885
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
    67
	inputStream     <Stream>  the stream from which elements are read
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
    68
	outputStream    <Stream>  the stream to which elements are written
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
    69
	filter          <Block>   the filter block;
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
    70
	unbound         <Boolean> if true, the stream is unbound.
472
33f423823933 commentary & doc
Claus Gittinger <cg@exept.de>
parents: 401
diff changeset
    71
33f423823933 commentary & doc
Claus Gittinger <cg@exept.de>
parents: 401
diff changeset
    72
    [author:]
885
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
    73
	Claus Gittinger
472
33f423823933 commentary & doc
Claus Gittinger <cg@exept.de>
parents: 401
diff changeset
    74
33f423823933 commentary & doc
Claus Gittinger <cg@exept.de>
parents: 401
diff changeset
    75
    [See also:]
885
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
    76
	ReadStream WriteStream
472
33f423823933 commentary & doc
Claus Gittinger <cg@exept.de>
parents: 401
diff changeset
    77
"
33f423823933 commentary & doc
Claus Gittinger <cg@exept.de>
parents: 401
diff changeset
    78
33f423823933 commentary & doc
Claus Gittinger <cg@exept.de>
parents: 401
diff changeset
    79
!
401
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
examples
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
"
474
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
    83
  pushing the contents of a stream onto another stream
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
    84
  (here, the Transcript) without a need to read everyting into a
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
    85
  buffer or to reinvent the read-loop:
479
9653144c97b4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 477
diff changeset
    86
  (notice, a FilteringLineStream does this with less overhead,
9653144c97b4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 477
diff changeset
    87
   due to the byte-wise reading done here)
885
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
    88
								[exBegin]
474
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
    89
    |in pusher|
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
    90
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
    91
    in := 'Makefile' asFilename readStream.
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
    92
    pusher := FilteringStream readingFrom:in writingTo:Transcript.
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
    93
    pusher filterUpToEnd
885
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
    94
								[exEnd]
474
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
    95
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
    96
401
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
  filter random numbers:
885
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
    98
								[exBegin]
401
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
    |in filter|
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
    in := Random new.
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
474
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   103
    filter := FilteringLineStream readingFrom:in.
401
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104
    filter filter:[:num | ((num >= 0.5) and:[num <= 0.6]) ifTrue:[num] ifFalse:[nil]].
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
    20 timesRepeat:[
885
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
   107
	Transcript showCR:(filter next printString).
401
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
    ]
885
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
   109
								[exEnd]
401
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
  filtering prime numbers:
885
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
   112
								[exBegin]
401
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
    |num generator primeFilter addFilter|
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   114
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
    num := 1.
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   116
    generator := Plug new.
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
    generator respondTo:#next
885
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
   118
		   with:[num := num + 1. num].
401
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   119
    generator respondTo:#atEnd
885
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
   120
		   with:[false].
401
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   121
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   122
    addFilter := [:prime | |newFilter|
885
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
   123
	newFilter := FilteringLineStream basicNew.
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
   124
	newFilter filter:[:num | (num \\ prime) == 0 ifTrue:[
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
   125
				    nil
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
   126
				 ] ifFalse:[
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
   127
				    num
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
   128
				 ]
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
   129
			 ].
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
   130
	newFilter inputStream:primeFilter.
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
   131
	primeFilter := newFilter
401
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   132
    ].
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   133
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   134
    addFilter value:2.
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   135
    primeFilter inputStream:generator.
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   136
472
33f423823933 commentary & doc
Claus Gittinger <cg@exept.de>
parents: 401
diff changeset
   137
    10000 timesRepeat:[
885
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
   138
	|nextPrime|
401
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   139
885
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
   140
	nextPrime := primeFilter next.
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
   141
	addFilter value:nextPrime.
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
   142
	Transcript showCR:nextPrime.
401
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   143
    ]
885
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
   144
								[exEnd]
401
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   145
"
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   146
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   147
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   148
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   149
! !
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   150
474
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   151
!FilteringStream class methodsFor:'instance creation'!
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   152
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   153
new
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   154
    "create and return a new filteringStream.
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   155
     The resulting stream must be connected to some other stream,
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   156
     before being used"
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   157
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   158
    ^ self basicNew initialize.
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   159
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   160
    "Created: 11.1.1997 / 15:31:30 / cg"
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   161
    "Modified: 11.1.1997 / 15:33:13 / cg"
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   162
!
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   163
477
6124ae485dbd need readAhead
Claus Gittinger <cg@exept.de>
parents: 474
diff changeset
   164
on:something
6124ae485dbd need readAhead
Claus Gittinger <cg@exept.de>
parents: 474
diff changeset
   165
    "create and return a new filteringStream, which reads from
6124ae485dbd need readAhead
Claus Gittinger <cg@exept.de>
parents: 474
diff changeset
   166
     something (which must be convertable to a stream)"
6124ae485dbd need readAhead
Claus Gittinger <cg@exept.de>
parents: 474
diff changeset
   167
6124ae485dbd need readAhead
Claus Gittinger <cg@exept.de>
parents: 474
diff changeset
   168
    ^ self readingFrom:something readStream
6124ae485dbd need readAhead
Claus Gittinger <cg@exept.de>
parents: 474
diff changeset
   169
6124ae485dbd need readAhead
Claus Gittinger <cg@exept.de>
parents: 474
diff changeset
   170
    "Created: 11.1.1997 / 19:19:34 / cg"
6124ae485dbd need readAhead
Claus Gittinger <cg@exept.de>
parents: 474
diff changeset
   171
!
6124ae485dbd need readAhead
Claus Gittinger <cg@exept.de>
parents: 474
diff changeset
   172
474
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   173
readingFrom:aReadStream
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   174
    "create and return a new filteringStream, which reads from
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   175
     another stream"
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   176
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   177
    ^ self basicNew initialize inputStream:aReadStream.
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   178
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   179
    "Created: 11.1.1997 / 15:32:15 / cg"
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   180
!
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   181
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   182
readingFrom:aReadStream writingTo:aWriteStream
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   183
    "create and return a new filteringStream, which reads from
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   184
     aReadStream and writes to aWriteStream."
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   185
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   186
    |newStream|
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   187
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   188
    newStream := self basicNew initialize.
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   189
    newStream inputStream:aReadStream.
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   190
    newStream outputStream:aWriteStream.
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   191
    ^ newStream
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   192
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   193
    "Created: 11.1.1997 / 15:32:28 / cg"
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   194
!
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   195
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   196
writingTo:aWriteStream
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   197
    "create and return a new filteringStream, which writes to
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   198
     another stream"
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   199
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   200
    ^ self basicNew initialize outputStream:aWriteStream.
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   201
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   202
    "Created: 11.1.1997 / 15:32:36 / cg"
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   203
! !
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   204
401
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   205
!FilteringStream methodsFor:'access - pull-reading'!
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   206
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   207
filterUpToEnd
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   208
    "pull input from inputStream up to the end,
474
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   209
     push it filtered into the outputStream."
401
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   210
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   211
    [inputStream atEnd] whileFalse:[
885
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
   212
	self nextPut:(inputStream next)
401
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   213
    ].
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   214
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   215
    "Created: 2.7.1996 / 21:06:42 / cg"
474
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   216
    "Modified: 11.1.1997 / 16:08:35 / cg"
401
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   217
!
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   218
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   219
next
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   220
    "pull input from inputStream and
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   221
     push it filtered into the outputStream"
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   222
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   223
    |input output|
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   224
477
6124ae485dbd need readAhead
Claus Gittinger <cg@exept.de>
parents: 474
diff changeset
   225
    "/ readAhead input has already been filtered
6124ae485dbd need readAhead
Claus Gittinger <cg@exept.de>
parents: 474
diff changeset
   226
    "/ (see #atEnd)
6124ae485dbd need readAhead
Claus Gittinger <cg@exept.de>
parents: 474
diff changeset
   227
6124ae485dbd need readAhead
Claus Gittinger <cg@exept.de>
parents: 474
diff changeset
   228
    readAhead notNil ifTrue:[
885
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
   229
	input := readAhead.
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
   230
	readAhead := nil.
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
   231
	^ input
477
6124ae485dbd need readAhead
Claus Gittinger <cg@exept.de>
parents: 474
diff changeset
   232
    ].
6124ae485dbd need readAhead
Claus Gittinger <cg@exept.de>
parents: 474
diff changeset
   233
401
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   234
    [inputStream atEnd] whileFalse:[
885
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
   235
	"/ get an element
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
   236
	input := inputStream next.
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
   237
	filter isNil ifTrue:[
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
   238
	    ^ input
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
   239
	].
474
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   240
885
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
   241
	"/ filter it - this may return nil, to eat it
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
   242
	output := filter value:input.
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
   243
	output notNil ifTrue:[
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
   244
	    "/ good - output it
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
   245
	    ^ output.
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
   246
	].
401
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   247
    ].
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   248
    ^ nil
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   249
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   250
    "Created: 2.7.1996 / 21:09:58 / cg"
477
6124ae485dbd need readAhead
Claus Gittinger <cg@exept.de>
parents: 474
diff changeset
   251
    "Modified: 11.1.1997 / 17:17:27 / cg"
401
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   252
! !
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   253
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   254
!FilteringStream methodsFor:'access - push-writing'!
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   255
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   256
nextPut:something
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   257
    "push something through the filter"
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   258
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   259
    |output|
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   260
472
33f423823933 commentary & doc
Claus Gittinger <cg@exept.de>
parents: 401
diff changeset
   261
    "/ filter it
474
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   262
    filter isNil ifTrue:[
885
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
   263
	outputStream nextPut:something
474
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   264
    ] ifFalse:[
885
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
   265
	output := filter value:something.
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
   266
	output notNil ifTrue:[
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
   267
	    outputStream nextPut:output
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
   268
	]
401
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   269
    ]
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   270
474
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   271
    "Modified: 11.1.1997 / 16:12:52 / cg"
401
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   272
! !
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   273
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   274
!FilteringStream methodsFor:'accessing'!
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   275
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   276
filter
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   277
    "return the filter"
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   278
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   279
    ^ filter
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   280
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   281
    "Modified: 2.7.1996 / 21:03:36 / cg"
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   282
    "Created: 2.7.1996 / 21:06:42 / cg"
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   283
!
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   284
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   285
filter:something
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   286
    "set the filter"
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   287
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   288
    filter := something.
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   289
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   290
    "Modified: 2.7.1996 / 21:03:40 / cg"
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   291
    "Created: 2.7.1996 / 21:06:42 / cg"
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   292
!
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   293
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   294
inputStream
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   295
    "return the inputStream"
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   296
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   297
    ^ inputStream
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   298
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   299
    "Modified: 2.7.1996 / 21:03:43 / cg"
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   300
    "Created: 2.7.1996 / 21:06:42 / cg"
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   301
!
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   302
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   303
inputStream:something
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   304
    "set the inputStream"
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   305
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   306
    inputStream := something.
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   307
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   308
    "Modified: 2.7.1996 / 21:03:46 / cg"
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   309
    "Created: 2.7.1996 / 21:06:42 / cg"
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   310
!
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   311
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   312
outputStream
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   313
    "return the outputStream"
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   314
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   315
    ^ outputStream
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   316
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   317
    "Modified: 2.7.1996 / 21:03:49 / cg"
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   318
    "Created: 2.7.1996 / 21:06:42 / cg"
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   319
!
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   320
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   321
outputStream:something
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   322
    "set the outputStream"
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   323
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   324
    outputStream := something.
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   325
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   326
    "Modified: 2.7.1996 / 21:03:52 / cg"
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   327
    "Created: 2.7.1996 / 21:06:42 / cg"
474
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   328
! !
401
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   329
474
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   330
!FilteringStream methodsFor:'misc'!
401
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   331
474
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   332
close
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   333
    "when I am closed, close my input - if any"
401
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   334
474
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   335
    inputStream notNil ifTrue:[
885
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
   336
	inputStream close
474
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   337
    ]
401
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   338
474
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   339
    "Created: 11.1.1997 / 15:27:17 / cg"
401
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   340
! !
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   341
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   342
!FilteringStream methodsFor:'queries'!
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   343
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   344
atEnd
472
33f423823933 commentary & doc
Claus Gittinger <cg@exept.de>
parents: 401
diff changeset
   345
    "return true, if the receiver stream is at the end"
33f423823933 commentary & doc
Claus Gittinger <cg@exept.de>
parents: 401
diff changeset
   346
477
6124ae485dbd need readAhead
Claus Gittinger <cg@exept.de>
parents: 474
diff changeset
   347
    |nextElement|
6124ae485dbd need readAhead
Claus Gittinger <cg@exept.de>
parents: 474
diff changeset
   348
6124ae485dbd need readAhead
Claus Gittinger <cg@exept.de>
parents: 474
diff changeset
   349
    readAhead notNil ifTrue:[^ false].
6124ae485dbd need readAhead
Claus Gittinger <cg@exept.de>
parents: 474
diff changeset
   350
6124ae485dbd need readAhead
Claus Gittinger <cg@exept.de>
parents: 474
diff changeset
   351
    filter isNil ifTrue:[
885
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
   352
	"/ then, its easy
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
   353
	^ inputStream atEnd
477
6124ae485dbd need readAhead
Claus Gittinger <cg@exept.de>
parents: 474
diff changeset
   354
    ].
401
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   355
477
6124ae485dbd need readAhead
Claus Gittinger <cg@exept.de>
parents: 474
diff changeset
   356
    "/ with a filter, things are more complicated, 
6124ae485dbd need readAhead
Claus Gittinger <cg@exept.de>
parents: 474
diff changeset
   357
    "/ since we cannot tell, without asking the filter ...
6124ae485dbd need readAhead
Claus Gittinger <cg@exept.de>
parents: 474
diff changeset
   358
6124ae485dbd need readAhead
Claus Gittinger <cg@exept.de>
parents: 474
diff changeset
   359
6124ae485dbd need readAhead
Claus Gittinger <cg@exept.de>
parents: 474
diff changeset
   360
    [inputStream atEnd] whileFalse:[
885
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
   361
	nextElement := inputStream next.
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
   362
	readAhead := filter value:nextElement.
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
   363
	readAhead notNil ifTrue:[^ false].
477
6124ae485dbd need readAhead
Claus Gittinger <cg@exept.de>
parents: 474
diff changeset
   364
    ].
6124ae485dbd need readAhead
Claus Gittinger <cg@exept.de>
parents: 474
diff changeset
   365
6124ae485dbd need readAhead
Claus Gittinger <cg@exept.de>
parents: 474
diff changeset
   366
    ^ true
6124ae485dbd need readAhead
Claus Gittinger <cg@exept.de>
parents: 474
diff changeset
   367
6124ae485dbd need readAhead
Claus Gittinger <cg@exept.de>
parents: 474
diff changeset
   368
    "Modified: 11.1.1997 / 17:16:45 / cg"
474
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   369
!
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   370
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   371
contentsSpecies
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   372
    "return the kind of collection I should return when asked
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   373
     for multiple elements."
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   374
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   375
    ^ inputStream contentsSpecies
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   376
61cb199537b5 comments & fixes
Claus Gittinger <cg@exept.de>
parents: 472
diff changeset
   377
    "Created: 11.1.1997 / 16:23:22 / cg"
401
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   378
! !
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   379
472
33f423823933 commentary & doc
Claus Gittinger <cg@exept.de>
parents: 401
diff changeset
   380
!FilteringStream class methodsFor:'documentation'!
401
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   381
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   382
version
885
c31412b26306 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 479
diff changeset
   383
    ^ '$Header: /cvs/stx/stx/libbasic2/FilteringStream.st,v 1.6 2000-03-02 14:15:08 cg Exp $'
401
f97488701314 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   384
! !