CollectingReadStream.st
author Claus Gittinger <cg@exept.de>
Sat, 05 Dec 2009 12:15:59 +0100
changeset 2363 cfc0e027297d
child 2365 992361c42f71
permissions -rw-r--r--
initial checkin
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2363
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"{ Package: 'stx:libbasic2' }"
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
Stream subclass:#CollectingReadStream
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
	instanceVariableNames:'collectBlock inStream'
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
	classVariableNames:''
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
	poolDictionaries:''
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
	category:'Streams'
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
!
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
!CollectingReadStream class methodsFor:'documentation'!
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
documentation
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
"
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
    A stream which provides the result of applying a collectBlock
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
    to the elements of an underlying stream. 
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
"
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
!
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
examples
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
"
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
                                                            [exBegin]
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
    |s|
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
    s := CollectingReadStream 
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
            on:#(1 2 3 4 5 6 7 8) readStream
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
            collecting:[:each | each squared].
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
    s upToEnd  
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
                                                            [exEnd]
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
                                                            [exBegin]
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
    |s|
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
    s := (#(1 2 3 4 5 6 7 8) readStream 
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
            selecting:[:n | n odd])
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
                collecting:[:n | n squared].
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
    s upToEnd    
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
                                                            [exEnd]
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
"
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
! !
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
!CollectingReadStream class methodsFor:'instance creation'!
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
on:aStream collecting:aBlock
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
    ^ self basicNew on:aStream collecting:aBlock
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
! !
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
!CollectingReadStream methodsFor:'instance creation'!
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
on:aStream collecting:aBlock
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
    inStream := aStream.
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
    collectBlock := aBlock.
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
! !
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
!CollectingReadStream methodsFor:'queries'!
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
atEnd
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
    ^ inStream atEnd
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
! !
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
!CollectingReadStream methodsFor:'reading'!
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
next
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
    inStream atEnd ifTrue:[
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
        ^ self pastEndRead
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
    ].
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
    ^ collectBlock value:(inStream next)
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
! !
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
!CollectingReadStream class methodsFor:'documentation'!
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
version_CVS
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
    ^ '$Header: /cvs/stx/stx/libbasic2/CollectingReadStream.st,v 1.1 2009-12-05 11:15:59 cg Exp $'
cfc0e027297d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
! !