terminals/Xtreams__SharedQueueWriteStream.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Wed, 01 Feb 2012 00:41:14 +0000
changeset 99 677c81c943e4
parent 78 a9dd8b69b39f
child 109 9587e2df7029
permissions -rw-r--r--
build files regenerated

"{ 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_SVN
    ^ '$Id$'
! !