Removed methods from FileHandle to make it compilable.
Having methods there is not a good idea anyway.
"{ Package: 'stx:goodies/xtreams/substreams' }"
"{ NameSpace: Xtreams }"
WriteStream subclass:#StitchWriteStream
instanceVariableNames:'active contentsSpecies'
classVariableNames:''
poolDictionaries:''
category:'Xtreams-Substreams'
!
StitchWriteStream comment:'StitchWriteStream combines a stream of source which returns streams in to a single continuous stream.
Instance Variables
active <WriteStream> the substream that is currently active
contentsSpecies <Class> the contents species of the substreams
'
!
!StitchWriteStream class methodsFor:'instance creation'!
on: aDestination contentsSpecies: aClass
^self new on: aDestination contentsSpecies: aClass
!
on: aDestination first: firstActiveStream
^self new on: aDestination first: firstActiveStream
! !
!StitchWriteStream methodsFor:'accessing'!
write: anInteger from: aSequenceableCollection at: startIndex
| remaining amount index |
index := startIndex.
remaining := anInteger.
amount := 0.
[
active == nil ifTrue: [
[active := destination get]
on: Incomplete
do: [ :ex | (Incomplete on: aSequenceableCollection count: anInteger - remaining at: startIndex) raise]].
amount := [active write: remaining from: aSequenceableCollection at: index] on: Incomplete do: [:ex | ex count].
remaining := remaining - amount.
index := index + amount.
remaining > 0] whileTrue:
[active close.
active := nil].
^anInteger
! !
!StitchWriteStream methodsFor:'initialize-release'!
close
self flush.
destination close
!
contentsSpecies
^contentsSpecies
!
flush
active == nil ifTrue: [^self].
active close.
active := nil
!
on: aDestination contentsSpecies: aClass
super on: aDestination.
contentsSpecies := aClass
!
on: aDestination first: firstActiveStream
super on: aDestination.
active := firstActiveStream.
contentsSpecies := active contentsSpecies
! !
!StitchWriteStream class methodsFor:'documentation'!
version_SVN
^ '$Id$'
! !