SplittingWriteStream.st
author Claus Gittinger <cg@exept.de>
Wed, 13 Oct 1999 21:49:21 +0200
changeset 833 a0311a2e96cb
child 912 0252ad15028b
permissions -rw-r--r--
initial checkin
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
833
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
Stream subclass:#SplittingWriteStream
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
	instanceVariableNames:'outStream1 outStream2'
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
	classVariableNames:''
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
	poolDictionaries:''
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
	category:'Streams-Misc'
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
!
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
!SplittingWriteStream class methodsFor:'documentation'!
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
documentation
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
"
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
    A stream duplicator - everything written onto a splittingWriteStream
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
    is written to two real streams.
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
    Useful, if you have to send something to two files/destinations
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
    simultaneously, and do not want to (or cannot) buffer it.
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
    Especially useful, to generate a checksum, 
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
    while sending something to a file 
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
    (if one of the output streams is a checksummer).
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
    [author:]
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
        Claus Gittinger (cg@exept)
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
    [see also:]
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
        WriteStream
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
    [instance variables:]
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
        outStream1      <Stream>       actual output streams
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
        outStream2      <Stream>
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
    [class variables:]
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
"
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
!
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
examples
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
"
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
    examples to be added.
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
                                                                [exBegin]
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
    |s1 s2 splitter|
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
    s1 := '/tmp/foo1' asFilename writeStream.
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
    s2 := '/tmp/foo2' asFilename writeStream.
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
    splitter := SplittingWriteStream on:s1 and:s2.
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
    splitter nextPutAll:'hello world'.
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
    splitter close.
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
                                                                [exEnd]
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
"
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
! !
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
!SplittingWriteStream class methodsFor:'instance creation'!
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
on:stream1 and:stream2
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
    ^ self basicNew setOutStream1:stream1 outStream2:stream2
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
! !
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
!SplittingWriteStream methodsFor:'private access'!
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
setOutStream1:stream1 outStream2:stream2
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
    outStream1 := stream1.
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
    outStream2 := stream2.
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
! !
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
!SplittingWriteStream methodsFor:'writing'!
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
close
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
    outStream1 close.
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
    outStream2 close.
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
!
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
endEntry
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
    outStream1 endEntry.
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
    outStream2 endEntry.
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
!
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
flush
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
    outStream1 flush.
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
    outStream2 flush.
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
!
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
nextPut:something
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
    outStream1 nextPut:something.
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
    outStream2 nextPut:something.
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
!
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
nextPutAll:something
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
    outStream1 nextPutAll:something.
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
    outStream2 nextPutAll:something.
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
! !
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
!SplittingWriteStream class methodsFor:'documentation'!
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
version
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
    ^ '$Header: /cvs/stx/stx/libbasic2/SplittingWriteStream.st,v 1.1 1999-10-13 19:49:21 cg Exp $'
a0311a2e96cb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
! !