Class OffHeapFixedMessageSizeRingBuffer

java.lang.Object
org.jctools.channels.proxy.ProxyChannelRingBuffer
org.jctools.channels.OffHeapFixedMessageSizeRingBuffer
Direct Known Subclasses:
MpscFFLamportOffHeapFixedSizeRingBuffer, MpscOffHeapFixedSizeRingBuffer, SpscOffHeapFixedSizeRingBuffer

public abstract class OffHeapFixedMessageSizeRingBuffer extends ProxyChannelRingBuffer
Channel protocol: - Fixed message size - 'null' indicator in message preceding byte (potentially use same for type mapping in future) - Use FF algorithm relying on indicator to support in place detection of next element existence
  • Field Details

    • READ_RELEASE_INDICATOR

      public static final int READ_RELEASE_INDICATOR
      See Also:
    • READ_ACQUIRE_INDICATOR

      public static final int READ_ACQUIRE_INDICATOR
      See Also:
    • WRITE_RELEASE_INDICATOR

      public static final int WRITE_RELEASE_INDICATOR
      See Also:
    • WRITE_ACQUIRE_INDICATOR

      public static final int WRITE_ACQUIRE_INDICATOR
      See Also:
    • MESSAGE_INDICATOR_SIZE

      public static final byte MESSAGE_INDICATOR_SIZE
      See Also:
    • HEADER_SIZE

      public static final int HEADER_SIZE
    • buffy

      private final ByteBuffer buffy
    • bufferAddress

      protected final long bufferAddress
    • consumerIndexAddress

      protected final long consumerIndexAddress
    • producerIndexAddress

      protected final long producerIndexAddress
    • mask

      protected final long mask
    • messageSize

      protected final int messageSize
    • references

      protected final Object[] references
    • referenceMessageSize

      protected final int referenceMessageSize
  • Constructor Details

    • OffHeapFixedMessageSizeRingBuffer

      public OffHeapFixedMessageSizeRingBuffer(int capacity, int primitiveMessageSize, int referenceMessageSize)
    • OffHeapFixedMessageSizeRingBuffer

      protected OffHeapFixedMessageSizeRingBuffer(ByteBuffer buff, int capacity, boolean isProducer, boolean isConsumer, boolean initialize, int primitiveMessageSize, Object[] references, int referenceMessageSize)
      This is to be used for an IPC queue with the direct buffer used being a memory mapped file.
      Parameters:
      buff -
      capacity - in messages, actual capacity will be
      primitiveMessageSize -
  • Method Details

    • getRequiredBufferSize

      public static int getRequiredBufferSize(int capacity, int messageSize)
    • createReferenceArray

      protected static Object[] createReferenceArray(int capacity, int referenceMessageSize)
    • getRequiredArraySize

      public static int getRequiredArraySize(int capacity, int primitiveMessageSize)
    • capacity

      public final int capacity()
    • size

      public final int size()
    • isEmpty

      public final boolean isEmpty()
    • isReadReleased

      protected final boolean isReadReleased(long offset)
    • writeReleaseState

      protected final void writeReleaseState(long offset)
    • readReleaseState

      protected final void readReleaseState(long offset)
    • writeAcquireState

      protected final void writeAcquireState(long offset)
    • readAcquireState

      protected final void readAcquireState(long offset)
    • offsetForIndex

      protected final long offsetForIndex(long currentHead)
    • offsetForIndex

      protected static long offsetForIndex(long bufferAddress, long mask, int messageSize, long currentHead)
    • relativeIndexForOffset

      protected final long relativeIndexForOffset(long offset)
    • relativeIndexForOffset

      protected static long relativeIndexForOffset(long bufferAddress, int messageSize, long offset)
      Computes an index relative to the buffer start for an offset. This does not recover the original index because that is a very hard problem.
      Parameters:
      bufferAddress -
      messageSize -
      offset -
      Returns:
    • lpConsumerIndex

      protected final long lpConsumerIndex()
    • lvConsumerIndex

      protected final long lvConsumerIndex()
    • soConsumerIndex

      protected final void soConsumerIndex(long value)
    • lpProducerIndex

      protected final long lpProducerIndex()
    • lvProducerIndex

      protected final long lvProducerIndex()
    • soProducerIndex

      protected final void soProducerIndex(long value)
    • arrayIndexForCursor

      protected final long arrayIndexForCursor(long currentHead)
    • arrayIndexForCursor

      protected static long arrayIndexForCursor(long mask, int referenceMessageSize, long currentHead)
    • consumerReferenceArrayIndex

      protected long consumerReferenceArrayIndex(long offset)
      Description copied from class: ProxyChannelRingBuffer
      Get the position index of the consumer in the reference array
      Specified by:
      consumerReferenceArrayIndex in class ProxyChannelRingBuffer
      Parameters:
      offset - the current offset of the consumer returned from ProxyChannelRingBuffer.readAcquire()
      Returns:
      the consumer index
    • producerReferenceArrayIndex

      protected long producerReferenceArrayIndex(long offset)
      Description copied from class: ProxyChannelRingBuffer
      Get the position index of the producer in the reference array
      Specified by:
      producerReferenceArrayIndex in class ProxyChannelRingBuffer
      Parameters:
      offset - the current offset of the producer returned from ProxyChannelRingBuffer.writeAcquire()
      Returns:
      the producer index
    • writeReference

      protected void writeReference(long offset, Object reference)
      Write a reference to the given position
      Specified by:
      writeReference in class ProxyChannelRingBuffer
      Parameters:
      offset - index into the reference array
      reference -
    • readReference

      protected Object readReference(long offset)
      Read a reference at the given position
      Specified by:
      readReference in class ProxyChannelRingBuffer
      Parameters:
      offset - index into the reference array
      Returns:
    • readAcquire

      protected abstract long readAcquire()
      Description copied from class: ProxyChannelRingBuffer
      Acquire an offset to read from
      Specified by:
      readAcquire in class ProxyChannelRingBuffer
      Returns:
      a base address for a message acquired to be read, or EOF if none is available
    • readRelease

      protected abstract void readRelease(long offset)
      Description copied from class: ProxyChannelRingBuffer
      Release the offset from reading
      Specified by:
      readRelease in class ProxyChannelRingBuffer
      Parameters:
      offset - the base address of a message that we are done reading and can be overwritten now
    • writeAcquire

      protected abstract long writeAcquire()
      Description copied from class: ProxyChannelRingBuffer
      Acquire an offset to write to. If there's no space available a wait strategy may be used.
      Specified by:
      writeAcquire in class ProxyChannelRingBuffer
      Returns:
      a base address for a message acquired to be written, or EOF if none is available
    • writeRelease

      protected abstract void writeRelease(long offset)
      Parameters:
      offset - the base address of a message that we are done writing and can be read now