public class VariableWidthBlockBuilder extends AbstractVariableWidthBlockBuilder
| Constructor and Description |
|---|
VariableWidthBlockBuilder(BlockBuilderStatus blockBuilderStatus,
int expectedEntries,
int expectedBytes) |
| Modifier and Type | Method and Description |
|---|---|
BlockBuilder |
appendNull()
Appends a null value to the block.
|
Block |
build()
Builds the block.
|
BlockBuilder |
closeEntry()
Closes the current entry.
|
Block |
copyPositions(int[] positions,
int offset,
int length)
Returns a block containing the specified positions.
|
Block |
copyRegion(int positionOffset,
int length)
Returns a block starting at the specified position and extends for the
specified length.
|
OptionalInt |
fixedSizeInBytesPerPosition()
Returns the number of bytes (in terms of
Block.getSizeInBytes()) required per position
that this block contains, assuming that the number of bytes required is a known static quantity
and not dependent on any particular specific position. |
byte |
getByteUnchecked(int internalPosition)
Gets a byte value at
internalPosition - getOffsetBase(). |
int |
getIntUnchecked(int internalPosition)
Gets a little endian int value at
internalPosition - getOffsetBase(). |
long |
getLongUnchecked(int internalPosition)
Gets a little endian long value at
internalPosition - getOffsetBase(). |
long |
getLongUnchecked(int internalPosition,
int offset)
Gets a little endian long at
offset in the value at internalPosition - getOffsetBase(). |
int |
getOffsetBase() |
int |
getPositionCount()
Returns the number of positions in this block.
|
int |
getPositionOffset(int position) |
long |
getPositionsSizeInBytes(boolean[] positions,
int usedPositionCount)
Returns the size of all positions marked true in the positions array.
|
io.airlift.slice.Slice |
getRawSlice(int position) |
Block |
getRegion(int positionOffset,
int length)
Returns a block starting at the specified position and extends for the
specified length.
|
long |
getRegionSizeInBytes(int positionOffset,
int length)
Returns the size of
block.getRegion(position, length). |
long |
getRetainedSizeInBytes()
Returns the retained size of this block in memory, including over-allocations.
|
short |
getShortUnchecked(int internalPosition)
Gets a little endian short at value at
internalPosition - getOffsetBase(). |
long |
getSizeInBytes()
Returns the size of this block as if it was compacted, ignoring any over-allocations.
|
int |
getSliceLength(int position)
Gets the length of the value at the
position. |
int |
getSliceLengthUnchecked(int internalPosition)
Gets the length of the slice value at
internalPosition - getOffsetBase(). |
io.airlift.slice.Slice |
getSliceUnchecked(int internalPosition,
int offset,
int length)
Gets a slice with offset
offset at internalPosition - getOffsetBase(). |
protected boolean |
isEntryNull(int position) |
boolean |
isNullUnchecked(int internalPosition) |
boolean |
mayHaveNull()
Is it possible the block may have a null value? If false, the block can not contain
a null, but if true, the block may or may not have a null.
|
BlockBuilder |
newBlockBuilderLike(BlockBuilderStatus blockBuilderStatus)
Creates a new block builder of the same type based on the current usage statistics of this block builder.
|
BlockBuilder |
newBlockBuilderLike(BlockBuilderStatus blockBuilderStatus,
int expectedEntries)
Creates a new block builder of the same type based on the expectedEntries and the current usage statistics of this block builder.
|
BlockBuilder |
readPositionFrom(io.airlift.slice.SliceInput input)
Read a single position from the input
|
void |
retainedBytesForEachPart(BiConsumer<Object,Long> consumer)
consumer visits each of the internal data container and accepts the size for it. |
String |
toString() |
BlockBuilder |
writeByte(int value)
Write a byte to the current entry;
|
AbstractVariableWidthBlockBuilder |
writeBytes(byte[] source,
int sourceIndex,
int length) |
BlockBuilder |
writeBytes(io.airlift.slice.Slice source,
int sourceIndex,
int length)
Write a byte sequences to the current entry;
|
BlockBuilder |
writeInt(int value)
Write a int to the current entry;
|
BlockBuilder |
writeLong(long value)
Write a long to the current entry;
|
BlockBuilder |
writeShort(int value)
Write a short to the current entry;
|
bytesCompare, bytesEqual, checkReadablePosition, compareTo, equals, getByte, getEncodingName, getEstimatedDataSizeForStats, getInt, getLong, getLong, getShort, getSingleValueBlock, getSlice, hash, isNull, writeBytesTo, writeBytesTo, writePositionTo, writePositionToclone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitappendStructure, appendStructureInternal, beginBlockEntry, beginDirectEntry, getPositionsbytesCompare, bytesEqual, compareTo, equals, getApproximateRegionLogicalSizeInBytes, getBlock, getByte, getEncodingName, getEstimatedDataSizeForStats, getInt, getLoadedBlock, getLogicalSizeInBytes, getLong, getLong, getRegionLogicalSizeInBytes, getShort, getSingleValueBlock, getSlice, hash, isNull, writeBytesTo, writeBytesTo, writePositionTo, writePositionTogetBlockUncheckedpublic VariableWidthBlockBuilder(@Nullable BlockBuilderStatus blockBuilderStatus, int expectedEntries, int expectedBytes)
public int getPositionOffset(int position)
getPositionOffset in class AbstractVariableWidthBlockpublic int getSliceLength(int position)
Blockposition.
This method must be implemented if @{code getSlice} is implemented.public io.airlift.slice.Slice getRawSlice(int position)
getRawSlice in class AbstractVariableWidthBlockpublic int getPositionCount()
Blockpublic long getSizeInBytes()
Blockpublic OptionalInt fixedSizeInBytesPerPosition()
BlockBlock.getSizeInBytes()) required per position
that this block contains, assuming that the number of bytes required is a known static quantity
and not dependent on any particular specific position. This allows for some complex block wrappings
to potentially avoid having to call Block.getPositionsSizeInBytes(boolean[], int) which
would require computing the specific positions selectedpublic long getRegionSizeInBytes(int positionOffset,
int length)
Blockblock.getRegion(position, length).
The method can be expensive. Do not use it outside an implementation of Block.public long getPositionsSizeInBytes(boolean[] positions,
int usedPositionCount)
Blockblock.getRegionSizeInBytes(position, length)
where you mark all positions for the regions first.public long getRetainedSizeInBytes()
Blockpublic void retainedBytesForEachPart(BiConsumer<Object,Long> consumer)
Blockconsumer visits each of the internal data container and accepts the size for it.
This method can be helpful in cases such as memory counting for internal data structure.
Also, the method should be non-recursive, only visit the elements at the top level,
and specifically should not call retainedBytesForEachPart on nested blocks
consumer should be called at least once with the current block and
must include the instance size of the current blockpublic Block copyPositions(int[] positions, int offset, int length)
Blockpositions array
that starts at offset and has length of length.
All specified positions must be valid for this block.
The returned block must be a compact representation of the original block.
public BlockBuilder writeByte(int value)
BlockBuilderpublic BlockBuilder writeShort(int value)
BlockBuilderpublic BlockBuilder writeInt(int value)
BlockBuilderpublic BlockBuilder writeLong(long value)
BlockBuilderpublic BlockBuilder writeBytes(io.airlift.slice.Slice source, int sourceIndex, int length)
BlockBuilderpublic AbstractVariableWidthBlockBuilder writeBytes(byte[] source, int sourceIndex, int length)
writeBytes in class AbstractVariableWidthBlockBuilderpublic BlockBuilder closeEntry()
BlockBuilderpublic BlockBuilder appendNull()
BlockBuilderpublic BlockBuilder readPositionFrom(io.airlift.slice.SliceInput input)
BlockBuilderpublic boolean mayHaveNull()
Blockprotected boolean isEntryNull(int position)
isEntryNull in class AbstractVariableWidthBlockpublic Block getRegion(int positionOffset, int length)
BlockThe region can be a view over this block. If this block is released the region block may also be released. If the region block is released this block may also be released.
public Block copyRegion(int positionOffset, int length)
BlockThe region returned must be a compact representation of the original block, unless their internal representation will be exactly the same. This method is useful for operators that hold on to a range of values without holding on to the entire block.
public Block build()
BlockBuilderpublic BlockBuilder newBlockBuilderLike(BlockBuilderStatus blockBuilderStatus)
BlockBuilderpublic BlockBuilder newBlockBuilderLike(BlockBuilderStatus blockBuilderStatus, int expectedEntries)
BlockBuilderpublic byte getByteUnchecked(int internalPosition)
UncheckedBlockinternalPosition - getOffsetBase().public short getShortUnchecked(int internalPosition)
UncheckedBlockinternalPosition - getOffsetBase().public int getIntUnchecked(int internalPosition)
UncheckedBlockinternalPosition - getOffsetBase().public long getLongUnchecked(int internalPosition)
UncheckedBlockinternalPosition - getOffsetBase().public long getLongUnchecked(int internalPosition,
int offset)
UncheckedBlockoffset in the value at internalPosition - getOffsetBase().public io.airlift.slice.Slice getSliceUnchecked(int internalPosition,
int offset,
int length)
UncheckedBlockoffset at internalPosition - getOffsetBase().public int getSliceLengthUnchecked(int internalPosition)
UncheckedBlockinternalPosition - getOffsetBase().
This method must be implemented if getSliceUnchecked is implemented.public boolean isNullUnchecked(int internalPosition)
internalPosition - getOffsetBase() is nullpublic int getOffsetBase()
Copyright © 2012–2022. All rights reserved.