Skip to content

Commit

Permalink
extract copyFromNotNull
Browse files Browse the repository at this point in the history
  • Loading branch information
ViggoC committed Sep 12, 2024
1 parent e10f5f7 commit 98e183d
Showing 1 changed file with 35 additions and 50 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1499,26 +1499,7 @@ public void copyFrom(int fromIndex, int thisIndex, ValueVector from) {
BitVectorHelper.unsetBit(validityBuffer, thisIndex);
} else {
final int viewLength = from.getDataBuffer().getInt((long) fromIndex * ELEMENT_SIZE);
BitVectorHelper.setBit(validityBuffer, thisIndex);
final int start = thisIndex * ELEMENT_SIZE;
final int copyStart = fromIndex * ELEMENT_SIZE;
from.getDataBuffer().getBytes(copyStart, viewBuffer, start, ELEMENT_SIZE);
if (viewLength > INLINE_SIZE) {
final int bufIndex =
from.getDataBuffer()
.getInt(((long) fromIndex * ELEMENT_SIZE) + LENGTH_WIDTH + PREFIX_WIDTH);
final int dataOffset =
from.getDataBuffer()
.getInt(
((long) fromIndex * ELEMENT_SIZE)
+ LENGTH_WIDTH
+ PREFIX_WIDTH
+ BUF_INDEX_WIDTH);
final ArrowBuf dataBuf = ((BaseVariableWidthViewVector) from).dataBuffers.get(bufIndex);
final ArrowBuf thisDataBuf = allocateOrGetLastDataBuffer(viewLength);
thisDataBuf.setBytes(thisDataBuf.writerIndex(), dataBuf, dataOffset, viewLength);
thisDataBuf.writerIndex(thisDataBuf.writerIndex() + viewLength);
}
copyFromNotNull(fromIndex, thisIndex, from, viewLength);
}
lastSet = thisIndex;
}
Expand All @@ -1540,40 +1521,44 @@ public void copyFromSafe(int fromIndex, int thisIndex, ValueVector from) {
} else {
final int viewLength = from.getDataBuffer().getInt((long) fromIndex * ELEMENT_SIZE);
handleSafe(thisIndex, viewLength);
BitVectorHelper.setBit(validityBuffer, thisIndex);
final int start = thisIndex * ELEMENT_SIZE;
final int copyStart = fromIndex * ELEMENT_SIZE;
if (viewLength > INLINE_SIZE) {
final int bufIndex =
from.getDataBuffer()
.getInt(((long) fromIndex * ELEMENT_SIZE) + LENGTH_WIDTH + PREFIX_WIDTH);
final int dataOffset =
from.getDataBuffer()
.getInt(
((long) fromIndex * ELEMENT_SIZE)
+ LENGTH_WIDTH
+ PREFIX_WIDTH
+ BUF_INDEX_WIDTH);
final ArrowBuf dataBuf = ((BaseVariableWidthViewVector) from).dataBuffers.get(bufIndex);
final ArrowBuf thisDataBuf = allocateOrGetLastDataBuffer(viewLength);

from.getDataBuffer().getBytes(copyStart, viewBuffer, start, LENGTH_WIDTH + PREFIX_WIDTH);
int writePosition = start + LENGTH_WIDTH + PREFIX_WIDTH;
// set buf id
viewBuffer.setInt(writePosition, dataBuffers.size() - 1);
writePosition += BUF_INDEX_WIDTH;
// set offset
viewBuffer.setInt(writePosition, (int) thisDataBuf.writerIndex());

thisDataBuf.setBytes(thisDataBuf.writerIndex(), dataBuf, dataOffset, viewLength);
thisDataBuf.writerIndex(thisDataBuf.writerIndex() + viewLength);
} else {
from.getDataBuffer().getBytes(copyStart, viewBuffer, start, ELEMENT_SIZE);
}
copyFromNotNull(fromIndex, thisIndex, from, viewLength);
}
lastSet = thisIndex;
}

private void copyFromNotNull(int fromIndex, int thisIndex, ValueVector from, int viewLength) {
BitVectorHelper.setBit(validityBuffer, thisIndex);
final int start = thisIndex * ELEMENT_SIZE;
final int copyStart = fromIndex * ELEMENT_SIZE;
if (viewLength > INLINE_SIZE) {
final int bufIndex =
from.getDataBuffer()
.getInt(((long) fromIndex * ELEMENT_SIZE) + LENGTH_WIDTH + PREFIX_WIDTH);
final int dataOffset =
from.getDataBuffer()
.getInt(
((long) fromIndex * ELEMENT_SIZE)
+ LENGTH_WIDTH
+ PREFIX_WIDTH
+ BUF_INDEX_WIDTH);
final ArrowBuf dataBuf = ((BaseVariableWidthViewVector) from).dataBuffers.get(bufIndex);
final ArrowBuf thisDataBuf = allocateOrGetLastDataBuffer(viewLength);

from.getDataBuffer().getBytes(copyStart, viewBuffer, start, LENGTH_WIDTH + PREFIX_WIDTH);
int writePosition = start + LENGTH_WIDTH + PREFIX_WIDTH;
// set buf id
viewBuffer.setInt(writePosition, dataBuffers.size() - 1);
writePosition += BUF_INDEX_WIDTH;
// set offset
viewBuffer.setInt(writePosition, (int) thisDataBuf.writerIndex());

thisDataBuf.setBytes(thisDataBuf.writerIndex(), dataBuf, dataOffset, viewLength);
thisDataBuf.writerIndex(thisDataBuf.writerIndex() + viewLength);
} else {
from.getDataBuffer().getBytes(copyStart, viewBuffer, start, ELEMENT_SIZE);
}
}

@Override
public ArrowBufPointer getDataPointer(int index) {
return getDataPointer(index, new ArrowBufPointer());
Expand Down

0 comments on commit 98e183d

Please sign in to comment.