Class FFBuffer<E>

    • Field Detail

      • P_INDEX_OFFSET

        private static final long P_INDEX_OFFSET
      • C_INDEX_OFFSET

        private static final long C_INDEX_OFFSET
    • Constructor Detail

      • FFBuffer

        public FFBuffer​(int capacity)
    • Method Detail

      • offer

        public boolean offer​(E e)
        Description copied from interface: MessagePassingQueue
        Called from a producer thread subject to the restrictions appropriate to the implementation and according to the Queue.offer(Object) interface.
        Specified by:
        offer in interface MessagePassingQueue<E>
        Specified by:
        offer in interface java.util.Queue<E>
        Parameters:
        e - not null, will throw NPE if it is
        Returns:
        true if element was inserted into the queue, false iff full
      • poll

        public E poll()
        Description copied from interface: MessagePassingQueue
        Called from the consumer thread subject to the restrictions appropriate to the implementation and according to the Queue.poll() interface.
        Specified by:
        poll in interface MessagePassingQueue<E>
        Specified by:
        poll in interface java.util.Queue<E>
        Returns:
        a message from the queue if one is available, null iff empty
      • peek

        public E peek()
        Description copied from interface: MessagePassingQueue
        Called from the consumer thread subject to the restrictions appropriate to the implementation and according to the Queue.peek() interface.
        Specified by:
        peek in interface MessagePassingQueue<E>
        Specified by:
        peek in interface java.util.Queue<E>
        Returns:
        a message from the queue if one is available, null iff empty
      • relaxedOffer

        public boolean relaxedOffer​(E message)
        Description copied from interface: MessagePassingQueue
        Called from a producer thread subject to the restrictions appropriate to the implementation. As opposed to Queue.offer(Object) this method may return false without the queue being full.
        Specified by:
        relaxedOffer in interface MessagePassingQueue<E>
        Parameters:
        message - not null, will throw NPE if it is
        Returns:
        true if element was inserted into the queue, false if unable to offer
      • relaxedPoll

        public E relaxedPoll()
        Description copied from interface: MessagePassingQueue
        Called from the consumer thread subject to the restrictions appropriate to the implementation. As opposed to Queue.poll() this method may return null without the queue being empty.
        Specified by:
        relaxedPoll in interface MessagePassingQueue<E>
        Returns:
        a message from the queue if one is available, null if unable to poll
      • relaxedPeek

        public E relaxedPeek()
        Description copied from interface: MessagePassingQueue
        Called from the consumer thread subject to the restrictions appropriate to the implementation. As opposed to Queue.peek() this method may return null without the queue being empty.
        Specified by:
        relaxedPeek in interface MessagePassingQueue<E>
        Returns:
        a message from the queue if one is available, null if unable to peek
      • drain

        public int drain​(MessagePassingQueue.Consumer<E> c)
        Description copied from interface: MessagePassingQueue
        Remove all available item from the queue and hand to consume. This should be semantically similar to:
         M m;
         while((m = relaxedPoll()) != null){
         c.accept(m);
         }
         
        There's no strong commitment to the queue being empty at the end of a drain. Called from a consumer thread subject to the restrictions appropriate to the implementation.

        WARNING: Explicit assumptions are made with regards to MessagePassingQueue.Consumer.accept(T) make sure you have read and understood these before using this method.

        Specified by:
        drain in interface MessagePassingQueue<E>
        Returns:
        the number of polled elements
      • fill

        public int fill​(MessagePassingQueue.Supplier<E> s)
        Description copied from interface: MessagePassingQueue
        Stuff the queue with elements from the supplier. Semantically similar to:
         while(relaxedOffer(s.get());
         
        There's no strong commitment to the queue being full at the end of a fill. Called from a producer thread subject to the restrictions appropriate to the implementation.

        Unbounded queues will fill up the queue with a fixed amount rather than fill up to oblivion. WARNING: Explicit assumptions are made with regards to MessagePassingQueue.Supplier.get() make sure you have read and understood these before using this method.

        Specified by:
        fill in interface MessagePassingQueue<E>
        Returns:
        the number of offered elements
      • drain

        public int drain​(MessagePassingQueue.Consumer<E> c,
                         int limit)
        Description copied from interface: MessagePassingQueue
        Remove up to limit elements from the queue and hand to consume. This should be semantically similar to:

        
           M m;
           int i = 0;
           for(;i < limit && (m = relaxedPoll()) != null; i++){
             c.accept(m);
           }
           return i;
         

        There's no strong commitment to the queue being empty at the end of a drain. Called from a consumer thread subject to the restrictions appropriate to the implementation.

        WARNING: Explicit assumptions are made with regards to MessagePassingQueue.Consumer.accept(T) make sure you have read and understood these before using this method.

        Specified by:
        drain in interface MessagePassingQueue<E>
        Returns:
        the number of polled elements
      • fill

        public int fill​(MessagePassingQueue.Supplier<E> s,
                        int limit)
        Description copied from interface: MessagePassingQueue
        Stuff the queue with up to limit elements from the supplier. Semantically similar to:

        
           for(int i=0; i < limit && relaxedOffer(s.get()); i++);
         

        There's no strong commitment to the queue being full at the end of a fill. Called from a producer thread subject to the restrictions appropriate to the implementation. WARNING: Explicit assumptions are made with regards to MessagePassingQueue.Supplier.get() make sure you have read and understood these before using this method.

        Specified by:
        fill in interface MessagePassingQueue<E>
        Returns:
        the number of offered elements