package com.revolsys.parallel.channel.store; import com.revolsys.parallel.channel.ChannelValueStore; /** * <H2>Description</H2> The ZeroBuffer class is an implementation of * ChannelValueStore which allows one Object to be sent across the Channel at any * one time. * <P> * The getState method will return EMPTY if the Channel does not contain an * Object and FULL if it does. * * @author P.D.Austin */ public class ZeroBuffer<T> extends ChannelValueStore<T> { /** The current state */ private int state = EMPTY; /** The Object */ private T value; /** * Returns a new Object with the same creation parameters as this Object. This * method should be overridden by subclasses to return a new Object that is * the same type as this Object. The new instance should be created by * constructing a new instance with the same parameters as the original. * <I>NOTE: Only the sizes of the data should be cloned not the stored * data.</I> * * @return The cloned instance of this Object. */ @Override protected Object clone() { return new ZeroBuffer<T>(); } /** * Returns the Object from the ZeroBuffer. * <P> * <I>NOTE: getState should be called before this method to check that the * state is not EMPTY. If the state is EMPTY the ZeroBuffer will be left in an * undefined state.</I> * <P> * Pre-condition: The state must not be EMPTY * * @return The next available Object from the ChannelValueStore */ @Override protected T get() { this.state = EMPTY; final T o = this.value; this.value = null; return o; } /** * Returns the current state of the ZeroBuffer, should be called to ensure the * Pre-conditions of the other methods are not broken. * * @return The current state of the ZeroBuffer (EMPTY or FULL) */ @Override protected int getState() { return this.state; } /** * Puts a new Object into the ZeroBuffer. * <P> * <I>NOTE: getState should be called before this method to check that the * state is not FULL. If the state is FULL the ZeroBuffer will be left in an * undefined state.</I> * <P> * Pre-condition: The state must not be FULL * * @param value The object to put in the ChannelValueStore */ @Override protected void put(final T value) { this.state = FULL; this.value = value; } @Override public String toString() { if (this.value == null) { return "[]"; } else { return "[" + this.value + "]"; } } }