@Override public BuffersBuffer duplicate() { checkDispose(); return create().duplicateFrom(this); }
@Override public void trim() { flip(); if (limit == 0) { removeRightBuffers(0); capacity = 0; } else { checkIndex(limit - 1); capacity -= removeRightBuffers(lastSegmentIndex + 1); } resetLastLocation(); }
@Override public char getChar() { final char value = getChar(position); position += 2; return value; }
@Override public Buffer split(final int splitPosition) { checkDispose(); if (splitPosition < 0 || splitPosition > capacity) { throw new IllegalArgumentException("Invalid splitPosition value, should be 0 <= splitPosition <= capacity"); return Buffers.EMPTY_BUFFER; } else if (splitPosition == 0) { final BuffersBuffer slice2Buffer = BuffersBuffer.create( memoryManager, buffers, buffersSize, byteOrder, isReadOnly); slice2Buffer.setPosLim(position, limit); initBuffers(null, 0); position = 0; limit = 0; capacity = 0; resetLastLocation(); checkIndex(splitPosition); final int splitBufferPos = toActiveBufferPos(splitPosition); BuffersBuffer.create(memoryManager, null, 0, byteOrder, false); slice2Buffer.append(splitBuffer); buffers[splitBufferIdx] = null; newSize = splitBufferIdx; } else if (splitBufferPos < splitBuffer.limit()) { final Buffer splitBuffer2 = splitBuffer.split(splitBufferPos); slice2Buffer.append(splitBuffer2);
@Override public int compareTo(Buffer that) { checkDispose(); int n = this.position() + Math.min(this.remaining(), that.remaining()); for (int i = this.position(), j = that.position(); i < n; i++, j++) { byte v1 = this.get(i); byte v2 = that.get(j); if (v1 == v2) continue; if (v1 < v2) return -1; return +1; } return this.remaining() - that.remaining(); }
private static BuffersBuffer create(final MemoryManager memoryManager, final Buffer[] buffers, final int buffersSize, final ByteOrder byteOrder, final boolean isReadOnly) { final BuffersBuffer buffer = ThreadCache.takeFromCache(CACHE_IDX); if (buffer != null) { buffer.isDisposed = false; buffer.order(byteOrder); buffer.set(memoryManager, buffers, buffersSize, isReadOnly); return buffer; } return new BuffersBuffer(memoryManager, buffers, buffersSize, isReadOnly); }
@Test public void testBulkArrayGetWithEmptyBuffers() throws Exception { BuffersBuffer b = BuffersBuffer.create(mm); b.append(Buffers.wrap(mm, "Hello ")); b.append(BuffersBuffer.create(mm)); b.append(Buffers.wrap(mm, "world!")); byte[] bytes = new byte[12]; b.get(bytes); assertEquals("Hello world!", new String(bytes)); }
@Override public byte get() { if (!hasRemaining()) { throw new BufferUnderflowException(); } return get(position++); }
@Override public short getShort() { final short value = getShort(position); position += 2; return value; }
@Override public long getLong() { final long value = getLong(position); position += 8; return value; }
@Override public int getInt() { final int value = getInt(position); position += 4; return value; }
/** * Construct <tt>BuffersBuffer</tt>. * @return {@link BuffersBuffer} */ public static BuffersBuffer create() { return create(MemoryManager.DEFAULT_MEMORY_MANAGER, null, 0, false); }
@Override public BuffersBuffer get(final ByteBuffer dst) { get(dst, dst.position(), dst.remaining()); dst.position(dst.limit()); return this; }
@Override public Buffer split(final int splitPosition) { checkDispose(); if (splitPosition < 0 || splitPosition > capacity) { throw new IllegalArgumentException("Invalid splitPosition value, should be 0 <= splitPosition <= capacity"); return Buffers.EMPTY_BUFFER; } else if (splitPosition == 0) { final BuffersBuffer slice2Buffer = BuffersBuffer.create( memoryManager, buffers, buffersSize, byteOrder, isReadOnly); slice2Buffer.setPosLim(position, limit); initBuffers(null, 0); position = 0; limit = 0; capacity = 0; resetLastLocation(); checkIndex(splitPosition); final int splitBufferPos = toActiveBufferPos(splitPosition); BuffersBuffer.create(memoryManager, null, 0, byteOrder, false); slice2Buffer.append(splitBuffer); buffers[splitBufferIdx] = null; newSize = splitBufferIdx; } else if (splitBufferPos < splitBuffer.limit()) { final Buffer splitBuffer2 = splitBuffer.split(splitBufferPos); slice2Buffer.append(splitBuffer2);
@Override public int compareTo(Buffer that) { checkDispose(); int n = this.position() + Math.min(this.remaining(), that.remaining()); for (int i = this.position(), j = that.position(); i < n; i++, j++) { byte v1 = this.get(i); byte v2 = that.get(j); if (v1 == v2) continue; if (v1 < v2) return -1; return +1; } return this.remaining() - that.remaining(); }
private static BuffersBuffer create(final MemoryManager memoryManager, final Buffer[] buffers, final int buffersSize, final ByteOrder byteOrder, final boolean isReadOnly) { final BuffersBuffer buffer = ThreadCache.takeFromCache(CACHE_IDX); if (buffer != null) { buffer.isDisposed = false; buffer.order(byteOrder); buffer.set(memoryManager, buffers, buffersSize, isReadOnly); return buffer; } return new BuffersBuffer(memoryManager, buffers, buffersSize, isReadOnly); }
@Test public void testBulkByteBufferGetWithEmptyBuffers() throws Exception { BuffersBuffer b = BuffersBuffer.create(mm); b.append(Buffers.wrap(mm, "Hello ")); b.append(BuffersBuffer.create(mm)); b.append(Buffers.wrap(mm, "world!")); ByteBuffer buffer = ByteBuffer.allocate(12); b.get(buffer); buffer.flip(); assertEquals("Hello world!", Charsets.getCharsetDecoder(Charsets.UTF8_CHARSET).decode(buffer).toString()); }
@Override public byte get() { if (!hasRemaining()) { throw new BufferUnderflowException(); } return get(position++); }
@Override public short getShort() { final short value = getShort(position); position += 2; return value; }