Package org.jcsp.util.ints

# Class InfiniteBufferInt

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

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

public class InfiniteBufferInt extends Object implements ChannelDataStoreInt, Serializable
This is used to create a buffered integer channel that always accepts and never loses any input.

## Description

`InfiniteBufferInt` is an implementation of `ChannelDataStoreInt` that yields a FIFO buffered semantics for a channel. When empty, the channel blocks readers. However, its capacity is infinite (expanding to whatever is needed so far as the underlying memory system will permit). So, it never gets full and blocks a writer. 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`.

An initial size for the buffer can be specified during construction.

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

## Field Summary

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

`EMPTY, FULL, NONEMPTYFULL`

## Constructor Summary

Constructors
Constructor
Description
`InfiniteBufferInt()`
Construct a new `InfiniteBufferInt` with the default size (of 8).
`InfiniteBufferInt(int initialSize)`
Construct a new `InfiniteBufferInt` with the specified initial size.

## Method Summary

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

### InfiniteBufferInt

public InfiniteBufferInt()
Construct a new `InfiniteBufferInt` with the default size (of 8).

### InfiniteBufferInt

public InfiniteBufferInt(int initialSize)
Construct a new `InfiniteBufferInt` with the specified initial size.

Parameters:
  `initialSize` - the number of ints the `InfiniteBufferInt` can initially store.
Throws:
  `BufferIntSizeError` - if `initialSize` 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 `InfiniteBufferInt` and removes it.

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

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

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

Implementation note: if `InfiniteBufferInt` is full, a new internal buffer with double the capacity is constructed and the old data copied across.

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

### getState

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

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

### clone

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

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

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

### removeAll

public void removeAll()

Specified by:
  `removeAll` in interface `ChannelDataStoreInt`