private void setFreeDataEndOffset(int offset) { assert (offset >= 0); IntSerDeUtils.putInt(array, tupleCountOffset - tupleCount * 4, offset); }
@Override public int getTupleEndOffset(int tupleIndex) { return IntSerDeUtils.getInt(array, tupleCountOffset - 4 * (tupleIndex + 1)); }
protected void reset(ByteBuffer buffer, boolean clear) { array = buffer.array(); if (clear) { IntSerDeUtils.putInt(array, FrameHelper.getTupleCountOffset(frame.getFrameSize()), 0); tupleCount = 0; tupleDataEndOffset = FrameConstants.TUPLE_START_OFFSET; } else { tupleCount = IntSerDeUtils.getInt(array, FrameHelper.getTupleCountOffset(frame.getFrameSize())); tupleDataEndOffset = tupleCount == 0 ? FrameConstants.TUPLE_START_OFFSET : IntSerDeUtils.getInt(array, FrameHelper.getTupleCountOffset(frame.getFrameSize()) - tupleCount * FrameConstants.SIZE_LEN); } }
/** * Cancels the lastly performed append operation. i.e. decreases the tuple count and resets the data end offset. */ @Override public boolean cancelAppend() throws HyracksDataException { // Decreases tupleCount by one. tupleCount = IntSerDeUtils.getInt(array, FrameHelper.getTupleCountOffset(frame.getFrameSize())); if (tupleCount == 0) { // There is no inserted tuple in the given frame. This should not happen. return false; } tupleCount = tupleCount - 1; // Resets tupleCount and DataEndOffset. IntSerDeUtils.putInt(array, FrameHelper.getTupleCountOffset(frame.getFrameSize()), tupleCount); tupleDataEndOffset = tupleCount == 0 ? FrameConstants.TUPLE_START_OFFSET : IntSerDeUtils.getInt(array, FrameHelper.getTupleCountOffset(frame.getFrameSize()) - tupleCount * FrameConstants.SIZE_LEN); return true; }
private void setTupleEndOffset(int tupleIndex, int offset) { IntSerDeUtils.putInt(array, tupleCountOffset - 4 * (tupleIndex + 1), offset); }
private int getPhysicalTupleCount() { return IntSerDeUtils.getInt(array, tupleCountOffset); }
private void setTupleCount(int count) { IntSerDeUtils.putInt(array, tupleCountOffset, count); }
@Override public int getTupleEndOffset(int tupleIndex) { return start + IntSerDeUtils.getInt(buffer.array(), tupleCountOffset - FrameConstants.SIZE_LEN * (tupleIndex + 1)); }
public static void serializeFrameSize(ByteBuffer outputFrame, int start, int numberOfMinFrame) { IntSerDeUtils.putInt(outputFrame.array(), start + FrameConstants.META_DATA_FRAME_COUNT_OFFSET, numberOfMinFrame); }
@Override public int getTupleStartOffset(int tupleIndex) { int offset = tupleIndex == 0 ? 0 : IntSerDeUtils.getInt(array, tupleCountOffset - 4 * tupleIndex); return Math.abs(offset); }
private void setDeleteSpace(int count) { IntSerDeUtils.putInt(array, buffer.capacity() - SIZE_DELETED_SPACE, count); }
@Override public int getTupleStartOffset(int tupleIndex) { int offset = tupleIndex == 0 ? FrameConstants.TUPLE_START_OFFSET : IntSerDeUtils.getInt(buffer.array(), tupleCountOffset - 4 * tupleIndex); return start + offset; }
private void appendMessage(ByteBuffer message) { int messageLength = message.limit() - message.position(); System.arraycopy(message.array(), message.position(), array, tupleDataEndOffset, messageLength); tupleDataEndOffset += messageLength; IntSerDeUtils.putInt(getBuffer().array(), FrameHelper.getTupleCountOffset(frame.getFrameSize()) - 4 * (tupleCount + 1), tupleDataEndOffset); ++tupleCount; IntSerDeUtils.putInt(getBuffer().array(), FrameHelper.getTupleCountOffset(frame.getFrameSize()), tupleCount); }
@Override public int getTupleCount() { return IntSerDeUtils.getInt(buffer.array(), tupleCountOffset); }
private int findAvailableFrame(int frameSize) throws HyracksDataException { int frameId = freeSlotPolicy.popBestFit(frameSize); if (frameId >= 0) { return frameId; } ByteBuffer buffer = framePool.allocateFrame(frameSize); if (buffer != null) { IntSerDeUtils.putInt(buffer.array(), FrameHelper.getTupleCountOffset(buffer.capacity()), 0); physicalFrameOffsets.add(new PhysicalFrameOffset(buffer, 0)); return physicalFrameOffsets.size() - 1; } return -1; }
public static int deserializeNumOfMinFrame(ByteBuffer buffer, int start) { return IntSerDeUtils.getInt(buffer.array(), start + FrameConstants.META_DATA_FRAME_COUNT_OFFSET); }
@Override public boolean appendSkipEmptyField(int[] fieldSlots, byte[] bytes, int offset, int length) throws HyracksDataException { if (canHoldNewTuple(fieldSlots.length, length)) { int effectiveSlots = 0; for (int i = 0; i < fieldSlots.length; ++i) { if (fieldSlots[i] > 0) { IntSerDeUtils.putInt(array, tupleDataEndOffset + i * 4, fieldSlots[i]); effectiveSlots++; } } System.arraycopy(bytes, offset, array, tupleDataEndOffset + effectiveSlots * 4, length); tupleDataEndOffset += effectiveSlots * 4 + length; IntSerDeUtils.putInt(array, FrameHelper.getTupleCountOffset(frame.getFrameSize()) - 4 * (tupleCount + 1), tupleDataEndOffset); ++tupleCount; IntSerDeUtils.putInt(array, FrameHelper.getTupleCountOffset(frame.getFrameSize()), tupleCount); return true; } return false; }
private int getFreeDataEndOffset() { return tupleCount == 0 ? 0 : Math.abs(IntSerDeUtils.getInt(array, tupleCountOffset - tupleCount * 4)); }
private void appendNullMessage() { array[tupleDataEndOffset] = NULL_FEED_MESSAGE; tupleDataEndOffset++; IntSerDeUtils.putInt(getBuffer().array(), FrameHelper.getTupleCountOffset(frame.getFrameSize()) - 4 * (tupleCount + 1), tupleDataEndOffset); ++tupleCount; IntSerDeUtils.putInt(getBuffer().array(), FrameHelper.getTupleCountOffset(frame.getFrameSize()), tupleCount); }
private int getDeletedSpace() { return IntSerDeUtils.getInt(array, buffer.capacity() - SIZE_DELETED_SPACE); }