Package org.jcsp.util.ints

# Class BufferInt

java.lang.Object
org.jcsp.util.ints.BufferInt

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

public class BufferInt extends Object implements ChannelDataStoreInt, Serializable
This is used to create a buffered integer channel that never loses data.

## Description

`BufferInt` is an implementation of `ChannelDataStoreInt` that yields a blocking FIFO buffered semantics for a channel. See the `static` construction methods of `Channel` (`Channel.one2oneInt(org.jcsp.util.ints.ChannelDataStoreInt)` etc.).

The `getState` method returns `EMPTY`, `NONEMPTYFULL` or `FULL` according to the state of the buffer.

Author:
  P.D. Austin
See Also:
  - `ZeroBufferInt`
  - `OverWriteOldestBufferInt`
  - `OverWritingBufferInt`
  - `OverFlowingBufferInt`
  - `InfiniteBufferInt`
  - `ChannelInt`
  - Serialized Form

## Field Summary

### Fields inherited from interface org.jcsp.util.ints.ChannelDataStoreInt

`EMPTY, FULL, NONEMPTYFULL`

## Constructor Summary

Constructors
Constructor
Description
`BufferInt(int size)`
Construct a new `BufferInt` with the specified size.

## Method Summary

Modifier and Type
Method
Description
`Object`
`clone()`
Returns a new (and `EMPTY`) `BufferInt` with the same creation parameters as this one.
`void`
`endGet()`
Removes the oldest integer from the buffer.
`int`
`get()`
Returns the oldest `int` from the `BufferInt` and removes it.
`int`
`getState()`
Returns the current state of the `BufferInt`.
`void`
`put(int value)`
Puts a new `int` into the `BufferInt`.
`void`
`removeAll()`
`int`
`startGet()`
Returns the oldest integer from the buffer but does not remove it.

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

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

## Constructor Details

### BufferInt

public BufferInt(int size)
Construct a new `BufferInt` with the specified size.

Parameters:
  `size` - the number of ints the BufferInt can store.
Throws:
  `BufferIntSizeError` - if `size` is negative. Note: no action should be taken to `try`/`catch` this exception - application code generating it is in error and needs correcting.

## Method Details

### get

public int get()
Returns the oldest `int` from the `BufferInt` and removes it.

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

Specified by:
  `get` in interface `ChannelDataStoreInt`
Returns:
  the oldest `int` from the `BufferInt`

### startGet

public int startGet()
Returns the oldest integer from the buffer but does not remove it. Pre-condition: `getState` must not currently return `EMPTY`.

Specified by:
  `startGet` in interface `ChannelDataStoreInt`
Returns:
  the oldest `int` from the `Buffer`
See Also:
  - `ChannelDataStoreInt.endGet()`

### endGet

public void endGet()
Removes the oldest integer from the buffer.

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

### put

public void put(int value)
Puts a new `int` into the `BufferInt`.

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

Specified by:
  `put` in interface `ChannelDataStoreInt`
Parameters:
  `value` - the int to put into the BufferInt

### getState

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

Specified by:
  `getState` in interface `ChannelDataStoreInt`
Returns:
  the current state of the `BufferInt` (`EMPTY`, `NONEMPTYFULL` or `FULL`)

### clone

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

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

Specified by:
  `clone` in interface `ChannelDataStoreInt`
Overrides:
  `clone` in class `Object`
Returns:
  the cloned instance of this `BufferInt`

### removeAll

public void removeAll()

Specified by:
  `removeAll` in interface `ChannelDataStoreInt`