package org.jctools.channels.proxy;
/**
* This is the definition of the API required for the byte code generated by the {@link ProxyChannelFactory}
*/
public abstract class ProxyChannelRingBuffer {
public static final long EOF = 0;
/**
* Acquire an offset to write to. If there's no space available a wait
* strategy may be used.
*
* @return the offset that was acquired for writing or {@link #EOF}
*/
protected abstract long writeAcquire();
/**
* Ordered store of the callTypeId for the message at offset
*
* @param offset
* the offset that was released for writing
* @param callTypeId
* A unique ID for the call
*/
protected abstract void writeRelease(long offset, int callTypeId);
/**
* Acquire an offset to read from
*
* @return the offset that was acquired for reading or {@link #EOF}
*/
protected abstract long readAcquire();
/**
* Release the offset from reading
*
* @param offset
* the offset to release for reading
*/
protected abstract void readRelease(long offset);
/**
* Get the position index of the consumer in the reference array
*
* @return the consumer index
*/
protected abstract long consumerReferenceArrayIndex();
/**
* Get the position index of the producer in the reference array
*
* @return the producer index
*/
protected abstract long producerReferenceArrayIndex();
/**
* Write a reference into the index of the reference array.
*
* @param index
* the index to write to
* @param reference
* the reference to write
*/
protected abstract void writeReference(long index, Object reference);
/**
* Read a reference from the index of the reference array.
*
* @param index
* the index to read from
* @return the reference that was read
*/
protected abstract Object readReference(long index);
}