public static VSizeColumnarInts readFromByteBuffer(ByteBuffer buffer) { byte versionFromBuffer = buffer.get(); if (VERSION == versionFromBuffer) { int numBytes = buffer.get(); int size = buffer.getInt(); ByteBuffer bufferToUse = buffer.asReadOnlyBuffer(); bufferToUse.limit(bufferToUse.position() + size); buffer.position(bufferToUse.limit()); return new VSizeColumnarInts( bufferToUse, numBytes ); } throw new IAE("Unknown version[%s]", versionFromBuffer); }
@Override public VSizeColumnarInts get(int index) { if (index >= size) { throw new IAE("Index[%d] >= size[%d]", index, size); } ByteBuffer myBuffer = theBuffer.asReadOnlyBuffer(); int startOffset = 0; int endOffset; if (index == 0) { endOffset = myBuffer.getInt(); } else { myBuffer.position(myBuffer.position() + ((index - 1) * Integer.BYTES)); startOffset = myBuffer.getInt(); endOffset = myBuffer.getInt(); } myBuffer.position(valuesOffset + startOffset); myBuffer.limit(myBuffer.position() + (endOffset - startOffset) + bufferBytes); return myBuffer.hasRemaining() ? new VSizeColumnarInts(myBuffer, numBytes) : null; }
public static VSizeColumnarInts fromIndexedInts(IndexedInts ints, int maxValue) { int numBytes = getNumBytesForMax(maxValue); final ByteBuffer buffer = ByteBuffer.allocate((ints.size() * numBytes) + (4 - numBytes)); writeToBuffer(buffer, ints, numBytes, maxValue); return new VSizeColumnarInts(buffer.asReadOnlyBuffer(), numBytes); }
public static VSizeColumnarInts readFromByteBuffer(ByteBuffer buffer) { byte versionFromBuffer = buffer.get(); if (VERSION == versionFromBuffer) { int numBytes = buffer.get(); int size = buffer.getInt(); ByteBuffer bufferToUse = buffer.asReadOnlyBuffer(); bufferToUse.limit(bufferToUse.position() + size); buffer.position(bufferToUse.limit()); return new VSizeColumnarInts( bufferToUse, numBytes ); } throw new IAE("Unknown version[%s]", versionFromBuffer); }
@Override public VSizeColumnarInts get(int index) { if (index >= size) { throw new IAE("Index[%d] >= size[%d]", index, size); } ByteBuffer myBuffer = theBuffer.asReadOnlyBuffer(); int startOffset = 0; int endOffset; if (index == 0) { endOffset = myBuffer.getInt(); } else { myBuffer.position(myBuffer.position() + ((index - 1) * Integer.BYTES)); startOffset = myBuffer.getInt(); endOffset = myBuffer.getInt(); } myBuffer.position(valuesOffset + startOffset); myBuffer.limit(myBuffer.position() + (endOffset - startOffset) + bufferBytes); return myBuffer.hasRemaining() ? new VSizeColumnarInts(myBuffer, numBytes) : null; }
public static VSizeColumnarInts fromIndexedInts(IndexedInts ints, int maxValue) { int numBytes = getNumBytesForMax(maxValue); final ByteBuffer buffer = ByteBuffer.allocate((ints.size() * numBytes) + (4 - numBytes)); writeToBuffer(buffer, ints, numBytes, maxValue); return new VSizeColumnarInts(buffer.asReadOnlyBuffer(), numBytes); }