uk.org.ogsadai.engine
Class SynchronizedPipe

java.lang.Object
  |
  +--uk.org.ogsadai.engine.SynchronizedPipe
All Implemented Interfaces:
BlockReader, BlockWriter, Pipe

public class SynchronizedPipe
extends java.lang.Object
implements Pipe

A simple fixed-sized synchronized pipe that uses a circular buffer to store blocks of data. The producer and consumer threads that use the pipe should be distinct.

Author:
The OGSA-DAI Project Team

Field Summary
private static java.lang.String COPYRIGHT_NOTICE
          Copyright statement.
private  CircularBuffer mBuffer
          Stores the blocks contained in the pipe.
private  boolean mFirstCall
          Indicates the first time the hasNext method is invoked.
private  java.lang.Object mNext
          The next block to return.
 
Constructor Summary
SynchronizedPipe(int bufferSize)
          Constructs a synchronized pipe of the specified fixed size.
 
Method Summary
 void close()
          Closes the block writer to indicate that there are no more blocks are to be written.
 boolean hasNext()
          Indicates whether or not there are any more blocks of data to be read from the block reader.
 boolean isOpen()
          Indicates whether or not the block writer is open for writing via the put method.
 java.lang.Object next()
          Gets the next block of data contained in the block reader.
private  java.lang.Object nextBlock()
          Gets the next block or null if there are no more blocks.
 void put(java.lang.Object block)
          Writes the specified block of output data.
private  void readNext()
          Reads the next block from the circular buffer, blocking until a block becomes available or the pipe is closed.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

COPYRIGHT_NOTICE

private static final java.lang.String COPYRIGHT_NOTICE
Copyright statement.

See Also:
Constant Field Values

mBuffer

private final CircularBuffer mBuffer
Stores the blocks contained in the pipe.


mNext

private java.lang.Object mNext
The next block to return.


mFirstCall

private boolean mFirstCall
Indicates the first time the hasNext method is invoked.

Constructor Detail

SynchronizedPipe

public SynchronizedPipe(int bufferSize)
Constructs a synchronized pipe of the specified fixed size.

Parameters:
bufferSize - The number of blocks that the pipe can store before blocking.
Method Detail

next

public java.lang.Object next()
Description copied from interface: BlockReader
Gets the next block of data contained in the block reader.

Specified by:
next in interface BlockReader
Returns:
an Object

nextBlock

private java.lang.Object nextBlock()
Gets the next block or null if there are no more blocks.

Returns:
next block or null.

readNext

private void readNext()
Reads the next block from the circular buffer, blocking until a block becomes available or the pipe is closed.


hasNext

public boolean hasNext()
Description copied from interface: BlockReader
Indicates whether or not there are any more blocks of data to be read from the block reader.

Specified by:
hasNext in interface BlockReader
Returns:
true if there are more blocks to be read or false otherwise

put

public void put(java.lang.Object block)
Description copied from interface: BlockWriter
Writes the specified block of output data.

Specified by:
put in interface BlockWriter
Parameters:
block - the Object block to write

close

public void close()
Description copied from interface: BlockWriter
Closes the block writer to indicate that there are no more blocks are to be written. After close has been called, the put method should no longer be used.

Specified by:
close in interface BlockWriter

isOpen

public boolean isOpen()
Description copied from interface: BlockWriter
Indicates whether or not the block writer is open for writing via the put method. After the close method has been invoked this method should return false.

Specified by:
isOpen in interface BlockWriter
Returns:
A boolean value indicating whether this block writer is open for writing