Class SingleProducerSequencer

    • Constructor Detail

      • SingleProducerSequencer

        public SingleProducerSequencer​(int bufferSize,
                                       WaitStrategy waitStrategy)
        Construct a Sequencer with the selected wait strategy and buffer size.
        Parameters:
        bufferSize - the size of the buffer that this will sequence over.
        waitStrategy - for those waiting on sequences.
    • Method Detail

      • hasAvailableCapacity

        public boolean hasAvailableCapacity​(int requiredCapacity)
        Description copied from interface: Sequenced
        Has the buffer got capacity to allocate another sequence. This is a concurrent method so the response should only be taken as an indication of available capacity.
        Parameters:
        requiredCapacity - in the buffer
        Returns:
        true if the buffer has the capacity to allocate the next sequence otherwise false.
        See Also:
        Sequenced.hasAvailableCapacity(int)
      • next

        public long next()
        Description copied from interface: Sequenced
        Claim the next event in sequence for publishing.
        Returns:
        the claimed sequence value
        See Also:
        Sequenced.next()
      • next

        public long next​(int n)
        Description copied from interface: Sequenced
        Claim the next n events in sequence for publishing. This is for batch event producing. Using batch producing requires a little care and some math.
         int n = 10;
         long hi = sequencer.next(n);
         long lo = hi - (n - 1);
         for (long sequence = lo; sequence <= hi; sequence++) {
             // Do work.
         }
         sequencer.publish(lo, hi);
         
        Parameters:
        n - the number of sequences to claim
        Returns:
        the highest claimed sequence value
        See Also:
        Sequenced.next(int)
      • tryNext

        public long tryNext()
                     throws InsufficientCapacityException
        Description copied from interface: Sequenced
        Attempt to claim the next event in sequence for publishing. Will return the number of the slot if there is at least requiredCapacity slots available.
        Returns:
        the claimed sequence value
        Throws:
        InsufficientCapacityException - thrown if there is no space available in the ring buffer.
        See Also:
        Sequenced.tryNext()
      • tryNext

        public long tryNext​(int n)
                     throws InsufficientCapacityException
        Description copied from interface: Sequenced
        Attempt to claim the next n events in sequence for publishing. Will return the highest numbered slot if there is at least requiredCapacity slots available. Have a look at Sequenced.next() for a description on how to use this method.
        Parameters:
        n - the number of sequences to claim
        Returns:
        the claimed sequence value
        Throws:
        InsufficientCapacityException - thrown if there is no space available in the ring buffer.
        See Also:
        Sequenced.tryNext(int)
      • remainingCapacity

        public long remainingCapacity()
        Description copied from interface: Sequenced
        Get the remaining capacity for this sequencer.
        Returns:
        The number of slots remaining.
        See Also:
        Sequenced.remainingCapacity()
      • claim

        public void claim​(long sequence)
        Description copied from interface: Sequencer
        Claim a specific sequence. Only used if initialising the ring buffer to a specific value.
        Parameters:
        sequence - The sequence to initialise too.
        See Also:
        Sequencer.claim(long)
      • publish

        public void publish​(long sequence)
        Description copied from interface: Sequenced
        Publishes a sequence. Call when the event has been filled.
        Parameters:
        sequence - the sequence to be published.
        See Also:
        Sequenced.publish(long)
      • publish

        public void publish​(long lo,
                            long hi)
        Description copied from interface: Sequenced
        Batch publish sequences. Called when all of the events have been filled.
        Parameters:
        lo - first sequence number to publish
        hi - last sequence number to publish
        See Also:
        Sequenced.publish(long, long)
      • isAvailable

        public boolean isAvailable​(long sequence)
        Description copied from interface: Sequencer
        Confirms if a sequence is published and the event is available for use; non-blocking.
        Parameters:
        sequence - of the buffer to check
        Returns:
        true if the sequence is available for use, false if not
        See Also:
        Sequencer.isAvailable(long)
      • getHighestPublishedSequence

        public long getHighestPublishedSequence​(long lowerBound,
                                                long availableSequence)
        Description copied from interface: Sequencer
        Get the highest sequence number that can be safely read from the ring buffer. Depending on the implementation of the Sequencer this call may need to scan a number of values in the Sequencer. The scan will range from nextSequence to availableSequence. If there are no available values >= nextSequence the return value will be nextSequence - 1. To work correctly a consumer should pass a value that is 1 higher than the last sequence that was successfully processed.
        Parameters:
        lowerBound - The sequence to start scanning from.
        availableSequence - The sequence to scan to.
        Returns:
        The highest value that can be safely read, will be at least nextSequence - 1.