Package org.jcsp.util.ints

# Class OverFlowingBufferInt

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

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

public class OverFlowingBufferInt extends Object implements ChannelDataStoreInt, Serializable
This is used to create a buffered integer channel that always accepts input, discarding its last entered data if full.

## Description

`OverFlowingBufferInt` is an implementation of `ChannelDataStoreInt` that yields a FIFO buffered semantics for a channel. When empty, the channel blocks readers. When full, a writer will be accepted but the written value overflows the buffer and is lost to the channel. See the `static` construction methods of `Channel` (`Channel.one2oneInt(org.jcsp.util.ints.ChannelDataStoreInt)` etc.).

The `getState` method returns `EMPTY` or `NONEMPTYFULL`, but never `FULL`.

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

## Field Summary

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

`EMPTY, FULL, NONEMPTYFULL`

## Constructor Summary

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

## Method Summary

Modifier and Type
Method
Description
`Object`
`clone()`
Returns a new (and `EMPTY`) `OverFlowingBufferInt` 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 `OverFlowingBufferInt` and removes it.
`int`
`getState()`
Returns the current state of the `OverFlowingBufferInt`.
`void`
`put(int value)`
Puts a new `int` into the `OverFlowingBufferInt`.
`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

### OverFlowingBufferInt

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

Parameters:
  `size` - the number of ints the OverFlowingBufferInt can store.
Throws:
  `BufferIntSizeError` - if `size` is zero or 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 `OverFlowingBufferInt` and removes it.

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

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

### 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 `OverFlowingBufferInt`.

If `OverFlowingBufferInt` is full, the item is discarded.

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

### getState

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

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

### clone

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

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

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

### removeAll

public void removeAll()

Specified by:
  `removeAll` in interface `ChannelDataStoreInt`