public class VariableWidthBlock extends AbstractVariableWidthBlock
| Constructor and Description |
|---|
VariableWidthBlock(int positionCount,
io.airlift.slice.Slice slice,
int[] offsets,
Optional<boolean[]> valueIsNull) |
| Modifier and Type | Method and Description |
|---|---|
Block |
appendNull()
Returns a block that has an appended null at the end, no matter if the original block has null or not.
|
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.
|
boolean |
equals(Object obj) |
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 position,
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(). |
int |
hashCode() |
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.
|
void |
retainedBytesForEachPart(ObjLongConsumer<Object> consumer)
consumer visits each of the internal data container and accepts the size for it. |
String |
toString() |
bytesCompare, bytesEqual, checkReadablePosition, compareTo, equals, getByte, getEncodingName, getEstimatedDataSizeForStats, getInt, getLong, getLong, getShort, getSingleValueBlock, getSlice, hash, isNull, writeBytesTo, writeBytesTo, writePositionTo, writePositionToclone, finalize, getClass, notify, notifyAll, wait, wait, waitgetApproximateRegionLogicalSizeInBytes, getBlock, getLoadedBlock, getLogicalSizeInBytes, getPositions, getRegionLogicalSizeInBytesgetBlockUncheckedpublic VariableWidthBlock(int positionCount,
io.airlift.slice.Slice slice,
int[] offsets,
Optional<boolean[]> valueIsNull)
public final int getPositionOffset(int position)
getPositionOffset in class AbstractVariableWidthBlockpublic int getSliceLength(int position)
Blockposition.
This method must be implemented if @{code getSlice} is implemented.public boolean mayHaveNull()
Blockprotected boolean isEntryNull(int position)
isEntryNull 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 position,
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(ObjLongConsumer<Object> 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 io.airlift.slice.Slice getRawSlice(int position)
getRawSlice 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 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 int getOffsetBase()
public boolean isNullUnchecked(int internalPosition)
internalPosition - getOffsetBase() is nullpublic Block appendNull()
BlockCopyright © 2012–2022. All rights reserved.