public T resetAndStart() { _reset(); return (_freeBuffer == null) ? _constructArray(INITIAL_CHUNK_SIZE) : _freeBuffer; }
public T completeAndClearBuffer(T lastChunk, int lastChunkEntries) { int totalSize = lastChunkEntries + _bufferedEntryCount; T resultArray = _constructArray(totalSize); int ptr = 0; for (Node<T> n = _bufferHead; n != null; n = n.next()) { ptr = n.copyData(resultArray, ptr); } System.arraycopy(lastChunk, 0, resultArray, ptr, lastChunkEntries); ptr += lastChunkEntries; // sanity check (could have failed earlier due to out-of-bounds, too) if (ptr != totalSize) { throw new IllegalStateException("Should have gotten "+totalSize+" entries, got "+ptr); } return resultArray; }
public UInt64NotPackedReaders(Field protoField) { super(protoField); this.primitiveArrayReader = (input, builderWrapper) -> { PrimitiveArrayBuilder<long[]> builder = builderWrapper.getBuilder(); long[] chunk = builder.resetAndStart(); int ix = 0; while (true) { if (ix >= chunk.length) { chunk = builder.appendCompletedChunk(chunk, ix); ix = 0; } chunk[ix++] = input.readUInt64(); int fieldNumber = input.readFieldNumber(); if (fieldNumber != this.fieldNumber) { builderWrapper.setArray(builder.completeAndClearBuffer(chunk, ix)); return fieldNumber; } } }; this.collectionReader = (input, collection) -> { while (true) { collection.add(input.readUInt64()); int fieldNumber = input.readFieldNumber(); if (fieldNumber != this.fieldNumber) { return fieldNumber; } } }; } }
/** * @return Length of the next chunk to allocate */ public final T appendCompletedChunk(T fullChunk, int fullChunkLength) { Node<T> next = new Node<T>(fullChunk, fullChunkLength); if (_bufferHead == null) { // first chunk _bufferHead = _bufferTail = next; } else { // have something already _bufferTail.linkNext(next); _bufferTail = next; } _bufferedEntryCount += fullChunkLength; int nextLen = fullChunkLength; // start with last chunk size // double the size for small chunks if (nextLen < SMALL_CHUNK_SIZE) { nextLen += nextLen; } else { // but by +25% for larger (to limit overhead) nextLen += (nextLen >> 2); } return _constructArray(nextLen); }
public DoublePackedReaders(Field protoField) { super(protoField); this.primitiveArrayReader = (input, builderWrapper) -> { PrimitiveArrayBuilder<double[]> builder = builderWrapper.getBuilder(); double[] chunk = builder.resetAndStart(); int ix = 0; while (true) { if (ix >= chunk.length) { chunk = builder.appendCompletedChunk(chunk, ix); ix = 0; } chunk[ix++] = input.readPackedDouble(); int fieldNumber = input.readFieldNumber(); if (fieldNumber != this.fieldNumber) { builderWrapper.setArray(builder.completeAndClearBuffer(chunk, ix)); return fieldNumber; } } }; this.collectionReader = (input, collection) -> { while (true) { collection.add(input.readPackedDouble()); int fieldNumber = input.readFieldNumber(); if (fieldNumber != this.fieldNumber) { return fieldNumber; } } }; } }
public T resetAndStart() { _reset(); return (_freeBuffer == null) ? _constructArray(INITIAL_CHUNK_SIZE) : _freeBuffer; }
public T completeAndClearBuffer(T lastChunk, int lastChunkEntries) { int totalSize = lastChunkEntries + _bufferedEntryCount; T resultArray = _constructArray(totalSize); int ptr = 0; for (Node<T> n = _bufferHead; n != null; n = n.next()) { ptr = n.copyData(resultArray, ptr); } System.arraycopy(lastChunk, 0, resultArray, ptr, lastChunkEntries); ptr += lastChunkEntries; // sanity check (could have failed earlier due to out-of-bounds, too) if (ptr != totalSize) { throw new IllegalStateException("Should have gotten "+totalSize+" entries, got "+ptr); } return resultArray; }
public SInt64PackedReaders(Field protoField) { super(protoField); this.primitiveArrayReader = (input, builderWrapper) -> { PrimitiveArrayBuilder<long[]> builder = builderWrapper.getBuilder(); long[] chunk = builder.resetAndStart(); int ix = 0; while (true) { if (ix >= chunk.length) { chunk = builder.appendCompletedChunk(chunk, ix); ix = 0; } chunk[ix++] = input.readPackedSInt64(); int fieldNumber = input.readFieldNumber(); if (fieldNumber != this.fieldNumber) { builderWrapper.setArray(builder.completeAndClearBuffer(chunk, ix)); return fieldNumber; } } }; this.collectionReader = (input, collection) -> { while (true) { collection.add(input.readPackedSInt64()); int fieldNumber = input.readFieldNumber(); if (fieldNumber != this.fieldNumber) { return fieldNumber; } } }; } }
public T resetAndStart() { _reset(); return (_freeBuffer == null) ? _constructArray(INITIAL_CHUNK_SIZE) : _freeBuffer; }
public T completeAndClearBuffer(T lastChunk, int lastChunkEntries) { int totalSize = lastChunkEntries + _bufferedEntryCount; T resultArray = _constructArray(totalSize); int ptr = 0; for (Node<T> n = _bufferHead; n != null; n = n.next()) { ptr = n.copyData(resultArray, ptr); } System.arraycopy(lastChunk, 0, resultArray, ptr, lastChunkEntries); ptr += lastChunkEntries; // sanity check (could have failed earlier due to out-of-bounds, too) if (ptr != totalSize) { throw new IllegalStateException("Should have gotten "+totalSize+" entries, got "+ptr); } return resultArray; }
public Fixed64NotPackedReaders(Field protoField) { super(protoField); this.primitiveArrayReader = (input, builderWrapper) -> { PrimitiveArrayBuilder<long[]> builder = builderWrapper.getBuilder(); long[] chunk = builder.resetAndStart(); int ix = 0; while (true) { if (ix >= chunk.length) { chunk = builder.appendCompletedChunk(chunk, ix); ix = 0; } chunk[ix++] = input.readFixed64(); int fieldNumber = input.readFieldNumber(); if (fieldNumber != this.fieldNumber) { builderWrapper.setArray(builder.completeAndClearBuffer(chunk, ix)); return fieldNumber; } } }; this.collectionReader = (input, collection) -> { while (true) { collection.add(input.readFixed64()); int fieldNumber = input.readFieldNumber(); if (fieldNumber != this.fieldNumber) { return fieldNumber; } } }; } }
public T resetAndStart() { _reset(); return (_freeBuffer == null) ? _constructArray(INITIAL_CHUNK_SIZE) : _freeBuffer; }
public T completeAndClearBuffer(T lastChunk, int lastChunkEntries) { int totalSize = lastChunkEntries + _bufferedEntryCount; T resultArray = _constructArray(totalSize); int ptr = 0; for (Node<T> n = _bufferHead; n != null; n = n.next()) { ptr = n.copyData(resultArray, ptr); } System.arraycopy(lastChunk, 0, resultArray, ptr, lastChunkEntries); ptr += lastChunkEntries; // sanity check (could have failed earlier due to out-of-bounds, too) if (ptr != totalSize) { throw new IllegalStateException("Should have gotten "+totalSize+" entries, got "+ptr); } return resultArray; }
public BoolPackedReaders(Field protoField) { super(protoField); this.primitiveArrayReader = (input, builderWrapper) -> { PrimitiveArrayBuilder<boolean[]> builder = builderWrapper.getBuilder(); boolean[] chunk = builder.resetAndStart(); int ix = 0; while (true) { if (ix >= chunk.length) { chunk = builder.appendCompletedChunk(chunk, ix); ix = 0; } chunk[ix++] = input.readPackedBool(); int fieldNumber = input.readFieldNumber(); if (fieldNumber != this.fieldNumber) { builderWrapper.setArray(builder.completeAndClearBuffer(chunk, ix)); return fieldNumber; } } }; this.collectionReader = (input, collection) -> { while (true) { collection.add(input.readPackedBool()); int fieldNumber = input.readFieldNumber(); if (fieldNumber != this.fieldNumber) { return fieldNumber; } } }; } }
public T resetAndStart() { _reset(); return (_freeBuffer == null) ? _constructArray(INITIAL_CHUNK_SIZE) : _freeBuffer; }
public T completeAndClearBuffer(T lastChunk, int lastChunkEntries) { int totalSize = lastChunkEntries + _bufferedEntryCount; T resultArray = _constructArray(totalSize); int ptr = 0; for (Node<T> n = _bufferHead; n != null; n = n.next()) { ptr = n.copyData(resultArray, ptr); } System.arraycopy(lastChunk, 0, resultArray, ptr, lastChunkEntries); ptr += lastChunkEntries; // sanity check (could have failed earlier due to out-of-bounds, too) if (ptr != totalSize) { throw new IllegalStateException("Should have gotten "+totalSize+" entries, got "+ptr); } return resultArray; }
public Int32PackedReaders(Field protoField) { super(protoField); this.primitiveArrayReader = (input, builderWrapper) -> { PrimitiveArrayBuilder<int[]> builder = builderWrapper.getBuilder(); int[] chunk = builder.resetAndStart(); int ix = 0; while (true) { if (ix >= chunk.length) { chunk = builder.appendCompletedChunk(chunk, ix); ix = 0; } chunk[ix++] = input.readPackedInt32(); int fieldNumber = input.readFieldNumber(); if (fieldNumber != this.fieldNumber) { builderWrapper.setArray(builder.completeAndClearBuffer(chunk, ix)); return fieldNumber; } } }; this.collectionReader = (input, collection) -> { while (true) { collection.add(input.readPackedInt32()); int fieldNumber = input.readFieldNumber(); if (fieldNumber != this.fieldNumber) { return fieldNumber; } } }; } }
public T resetAndStart() { _reset(); return (_freeBuffer == null) ? _constructArray(INITIAL_CHUNK_SIZE) : _freeBuffer; }
public T completeAndClearBuffer(T lastChunk, int lastChunkEntries) { int totalSize = lastChunkEntries + _bufferedEntryCount; T resultArray = _constructArray(totalSize); int ptr = 0; for (Node<T> n = _bufferHead; n != null; n = n.next()) { ptr = n.copyData(resultArray, ptr); } System.arraycopy(lastChunk, 0, resultArray, ptr, lastChunkEntries); ptr += lastChunkEntries; // sanity check (could have failed earlier due to out-of-bounds, too) if (ptr != totalSize) { throw new IllegalStateException("Should have gotten "+totalSize+" entries, got "+ptr); } return resultArray; }
public FloatPackedReaders(Field protoField) { super(protoField); this.primitiveArrayReader = (input, builderWrapper) -> { PrimitiveArrayBuilder<float[]> builder = builderWrapper.getBuilder(); float[] chunk = builder.resetAndStart(); int ix = 0; while (true) { if (ix >= chunk.length) { chunk = builder.appendCompletedChunk(chunk, ix); ix = 0; } chunk[ix++] = input.readPackedFloat(); int fieldNumber = input.readFieldNumber(); if (fieldNumber != this.fieldNumber) { builderWrapper.setArray(builder.completeAndClearBuffer(chunk, ix)); return fieldNumber; } } }; this.collectionReader = (input, collection) -> { while (true) { collection.add(input.readPackedFloat()); int fieldNumber = input.readFieldNumber(); if (fieldNumber != this.fieldNumber) { return fieldNumber; } } }; } }