terminals/Xtreams__SharedQueueWriteStream.st
author Martin Kobetic
Sun, 17 Nov 2013 00:21:39 -0500
changeset 141 263190106319
parent 109 9587e2df7029
permissions -rw-r--r--
merging

"{ Package: 'stx:goodies/xtreams/terminals' }"

"{ NameSpace: Xtreams }"

WriteStream subclass:#SharedQueueWriteStream
	instanceVariableNames:'contentsSpecies'
	classVariableNames:''
	poolDictionaries:''
	category:'Xtreams-Terminals'
!

SharedQueueWriteStream comment:'Write stream on a SharedQueue. Primarily used for data transfer between processes.
{{{
	queue := SharedQueue new.
	in := queue reading.
	out := queue writing.
	received := Array new writing.
	done := Semaphore new.
	consumer :=
		[ | size |
			[       (size := in get) isZero
			] whileFalse: [ | word |
				word := ByteString new: size.
				in read: size into: word.
				received put: word ].
			done signal.
		] fork.
	#(one two three four) do: [ :word | out put: word size; write: word ].
	out put: 0.
	done wait.
	received conclusion
}}}

Instance Variables
	contentsSpecies <Class> species for collections of elements of this stream

'
!


!SharedQueueWriteStream methodsFor:'accessing'!

write: anInteger from: aSequenceableCollection at: startIndex
	startIndex to: startIndex + anInteger - 1 do: [:index | destination nextPut: (aSequenceableCollection at: index)].
	^anInteger
! !

!SharedQueueWriteStream methodsFor:'initialize-release'!

close
!

contentsSpecies
	^contentsSpecies
!

contentsSpecies: aClass
	contentsSpecies := aClass
!

flush
!

on: aDestination
	super on: aDestination.
	contentsSpecies := Array
! !

!SharedQueueWriteStream class methodsFor:'documentation'!

version_HG

    ^ '$Changeset: <not expanded> $'
! !