/** * {@inheritDoc} */ @Override public int [] toArray() { final int size = size(); return toArray((new int [size])); }
/** * Ensures the internal buffer has enough free slots to store * <code>expectedAdditions</code>. Increases internal buffer size if needed. */ protected void ensureBufferSpace(int expectedAdditions) { final int bufferLen = buffer.length; final int elementsCount = size(); if (elementsCount + expectedAdditions >= bufferLen) { final int emptySlot = 1; // deque invariant: always an empty slot. final int newSize = resizer.grow(bufferLen, elementsCount + emptySlot, expectedAdditions); assert newSize >= (elementsCount + expectedAdditions + emptySlot) : "Resizer failed to" + " return sensible new size: " + newSize + " <= " + (elementsCount + expectedAdditions); try { final int[] newBuffer = (new int [newSize]); if (bufferLen > 0) { toArray(newBuffer); tail = elementsCount; head = 0; } this.buffer = newBuffer; } catch (OutOfMemoryError e) { throw new BufferAllocationException( "Not enough memory to allocate new buffers: %,d -> %,d", e, bufferLen, newSize); } } }
private DequeMapping(IdMapping mapping, IntArrayDeque data) { this.mapping = mapping; if (data.head <= data.tail) { this.data = data.buffer; this.offset = data.head; this.length = data.tail - data.head; } else { this.data = data.toArray(); this.offset = 0; this.length = this.data.length; } }
private DequeMapping(IdMapping mapping, IntArrayDeque data) { this.mapping = mapping; if (data.head <= data.tail) { this.data = data.buffer; this.offset = data.head; this.length = data.tail - data.head; } else { this.data = data.toArray(); this.offset = 0; this.length = this.data.length; } }
/** * {@inheritDoc} */ @Override public int [] toArray() { final int size = size(); return toArray((new int [size])); }
/** * Ensures the internal buffer has enough free slots to store * <code>expectedAdditions</code>. Increases internal buffer size if needed. */ protected void ensureBufferSpace(int expectedAdditions) { final int bufferLen = buffer.length; final int elementsCount = size(); if (elementsCount + expectedAdditions >= bufferLen) { final int emptySlot = 1; // deque invariant: always an empty slot. final int newSize = resizer.grow(bufferLen, elementsCount + emptySlot, expectedAdditions); assert newSize >= (elementsCount + expectedAdditions + emptySlot) : "Resizer failed to" + " return sensible new size: " + newSize + " <= " + (elementsCount + expectedAdditions); try { final int[] newBuffer = (new int [newSize]); if (bufferLen > 0) { toArray(newBuffer); tail = elementsCount; head = 0; } this.buffer = newBuffer; } catch (OutOfMemoryError e) { throw new BufferAllocationException( "Not enough memory to allocate new buffers: %,d -> %,d", e, bufferLen, newSize); } } }