@Override public T next() { if (!hasNext) { return null; } T item = null; try { buffer.headLock.readLock().lock(); item = buffer.data[next++]; if (next == buffer.maxSize) { next = 0; nextWrapCount++; } hasNext = calcHasNext(); } finally { buffer.headLock.readLock().unlock(); } return item; }
return false; Mode newMode = mode(); if ((newMode == Mode.EMPTY) || (newMode == Mode.END)) {
/** * Instantiates a new ring buffer iterator. * * @param buffer * the buffer */ public RingBufferIterator(RingBuffer<T> buffer) { this.buffer = buffer; next = buffer.tail; nextWrapCount = buffer.tailWrapCount; mode = Mode.START; hasNext = calcHasNext(); expectedModCount = buffer.modCount.get(); }
@Override public boolean hasNext() { buffer.headLock.readLock().lock(); try { if (expectedModCount != buffer.modCount.get()) { hasNext = calcHasNext(); } } finally { buffer.headLock.readLock().unlock(); } return hasNext; }
/** * Iterator. * * @return the iterator */ public Iterator<T> iterator() { return new RingBufferIterator<>(this); }