Package org.jcsp.util

# Class ZeroBuffer

java.lang.Object
org.jcsp.util.ZeroBuffer

All Implemented Interfaces:
  `Serializable`, `Cloneable`, `ChannelDataStore`

public class ZeroBuffer extends Object implements ChannelDataStore, Serializable
This is used to create a zero-buffered object channel that never loses data.

## Description

`ZeroBuffer` is an implementation of `ChannelDataStore` that yields the standard CSP semantics for a channel -- that is zero buffered with direct synchronisation between reader and writer. Unless specified otherwise, this is the default behaviour for channels. See the `static` construction methods of `Channel` (`Channel.one2one(org.jcsp.util.ChannelDataStore)` etc.).

The `getState` method will return `FULL` if there is an output waiting on the channel and `EMPTY` if there is not.

Author:
  P.D. Austin
See Also:
  - `Buffer`
  - `OverWriteOldestBuffer`
  - `OverWritingBuffer`
  - `OverFlowingBuffer`
  - `InfiniteBuffer`
  - `One2OneChannelImpl`
  - `Any2OneChannelImpl`
  - `One2AnyChannelImpl`
  - `Any2AnyChannelImpl`
  - Serialized Form

## Field Summary

### Fields inherited from interface org.jcsp.util.ChannelDataStore

`EMPTY, FULL, NONEMPTYFULL`

## Constructor Summary

Constructors
Constructor
Description
`ZeroBuffer()`

## Method Summary

Modifier and Type
Method
Description
`Object`
`clone()`
Returns a new (and `EMPTY`) `ZeroBuffer` with the same creation parameters as this one.
`void`
`endGet()`
Ends the extended rendezvous by clearing the buffer.
`Object`
`get()`
Returns the `Object` from the `ZeroBuffer`.
`int`
`getState()`
Returns the current state of the `ZeroBuffer`.
`void`
`put(Object value)`
Puts a new `Object` into the `ZeroBuffer`.
`void`
`removeAll()`
Deletes all items in the buffer, leaving it empty.
`Object`
`startGet()`
Begins an extended rendezvous - simply returns the next object in the buffer.

### Methods inherited from class java.lang.Object

`equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Constructor Details

### ZeroBuffer

public ZeroBuffer()

## Method Details

### get

public Object get()
Returns the `Object` from the `ZeroBuffer`.

Pre-condition: `getState` must not currently return `EMPTY`.

Specified by:
  `get` in interface `ChannelDataStore`
Returns:
  the `Object` from the `ZeroBuffer`

### startGet

public Object startGet()
Begins an extended rendezvous - simply returns the next object in the buffer. This function does not remove the object. Pre-condition: `getState` must not currently return `EMPTY`.

Specified by:
  `startGet` in interface `ChannelDataStore`
Returns:
  The object in the buffer.
See Also:
  - `ChannelDataStore.endGet()`

### endGet

public void endGet()
Ends the extended rendezvous by clearing the buffer.

Specified by:
  `endGet` in interface `ChannelDataStore`
See Also:
  - `ChannelDataStore.startGet()`

### put

public void put(Object value)
Puts a new `Object` into the `ZeroBuffer`.

Pre-condition: `getState` must not currently return `FULL`.

Specified by:
  `put` in interface `ChannelDataStore`
Parameters:
  `value` - the Object to put into the ZeroBuffer

### getState

public int getState()
Returns the current state of the `ZeroBuffer`.

Specified by:
  `getState` in interface `ChannelDataStore`
Returns:
  the current state of the `ZeroBuffer` (`EMPTY` or `FULL`)

### clone

public Object clone()
Returns a new (and `EMPTY`) `ZeroBuffer` with the same creation parameters as this one.

Note: Only the size and structure of the `ZeroBuffer` is cloned, not any stored data.

Specified by:
  `clone` in interface `ChannelDataStore`
Overrides:
  `clone` in class `Object`
Returns:
  the cloned instance of this `ZeroBuffer`.

### removeAll

public void removeAll()
Description copied from interface: `ChannelDataStore`
Deletes all items in the buffer, leaving it empty.

Specified by:
  `removeAll` in interface `ChannelDataStore`