private void setTupleEndOffset(int tupleIndex, int offset) { IntSerDeUtils.putInt(array, tupleCountOffset - 4 * (tupleIndex + 1), offset); }
private void setFreeDataEndOffset(int offset) { assert (offset >= 0); IntSerDeUtils.putInt(array, tupleCountOffset - tupleCount * 4, offset); }
private void setTupleCount(int count) { IntSerDeUtils.putInt(array, tupleCountOffset, count); }
private void setDeleteSpace(int count) { IntSerDeUtils.putInt(array, buffer.capacity() - SIZE_DELETED_SPACE, count); }
public static void serializeFrameSize(ByteBuffer outputFrame, int start, int numberOfMinFrame) { IntSerDeUtils.putInt(outputFrame.array(), start + FrameConstants.META_DATA_FRAME_COUNT_OFFSET, numberOfMinFrame); }
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); }
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; }
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); }
@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; }
@Override public boolean append(byte[] bytes, int offset, int length) throws HyracksDataException { if (canHoldNewTuple(0, length)) { System.arraycopy(bytes, offset, getBuffer().array(), tupleDataEndOffset, length); tupleDataEndOffset += 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; }
/** * append fieldSlots and bytes to the current frame */ @Override public boolean append(int[] fieldEndOffsets, byte[] bytes, int offset, int length) throws HyracksDataException { if (canHoldNewTuple(fieldEndOffsets.length, length)) { for (int i = 0; i < fieldEndOffsets.length; ++i) { IntSerDeUtils.putInt(array, tupleDataEndOffset + i * 4, fieldEndOffsets[i]); } System.arraycopy(bytes, offset, array, tupleDataEndOffset + fieldEndOffsets.length * 4, length); tupleDataEndOffset += fieldEndOffsets.length * 4 + length; IntSerDeUtils.putInt(getBuffer().array(), FrameHelper.getTupleCountOffset(frame.getFrameSize()) - 4 * (tupleCount + 1), tupleDataEndOffset); ++tupleCount; IntSerDeUtils.putInt(getBuffer().array(), FrameHelper.getTupleCountOffset(frame.getFrameSize()), tupleCount); return true; } return false; }
@Override public boolean append(IFrameTupleAccessor tupleAccessor, int tStartOffset, int tEndOffset) throws HyracksDataException { int length = tEndOffset - tStartOffset; if (canHoldNewTuple(0, length)) { ByteBuffer src = tupleAccessor.getBuffer(); System.arraycopy(src.array(), tStartOffset, array, tupleDataEndOffset, length); tupleDataEndOffset += 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; }
public boolean appendField(byte[] bytes, int offset, int length) throws HyracksDataException { if (canHoldNewTuple(fieldCount, lastFieldEndOffset + length)) { int currentFieldDataStart = tupleDataEndOffset + fieldCount * 4 + lastFieldEndOffset; System.arraycopy(bytes, offset, array, currentFieldDataStart, length); lastFieldEndOffset = lastFieldEndOffset + length; IntSerDeUtils.putInt(array, tupleDataEndOffset + currentField * 4, lastFieldEndOffset); if (++currentField == fieldCount) { tupleDataEndOffset += fieldCount * 4 + lastFieldEndOffset; IntSerDeUtils.putInt(array, FrameHelper.getTupleCountOffset(frame.getFrameSize()) - 4 * (tupleCount + 1), tupleDataEndOffset); ++tupleCount; IntSerDeUtils.putInt(array, FrameHelper.getTupleCountOffset(frame.getFrameSize()), tupleCount); //reset for the next tuple currentField = 0; lastFieldEndOffset = 0; } return true; } else { if (currentField > 0) { copyLeftOverDataFromFrameToBuffer(); } return false; } }
IntSerDeUtils.putInt(array, tupleDataEndOffset + i * 4, fieldSlots0[i]); IntSerDeUtils.putInt(array, tupleDataEndOffset + slotsLen0 + i * 4, src1.getInt(startOffset1 + i * 4) + dataLen0); tupleDataEndOffset + slotsLen0 + slotsLen1 + dataLen0, dataLen1); tupleDataEndOffset += (length0 + length1); IntSerDeUtils.putInt(array, FrameHelper.getTupleCountOffset(frame.getFrameSize()) - 4 * (tupleCount + 1), tupleDataEndOffset); ++tupleCount; IntSerDeUtils.putInt(array, FrameHelper.getTupleCountOffset(frame.getFrameSize()), tupleCount); return true;
IntSerDeUtils.putInt(array, tupleDataEndOffset + slotsLen0 + i * 4, (fieldSlots1[i] + dataLen0)); dataLen1); tupleDataEndOffset += (length0 + length1); IntSerDeUtils.putInt(array, FrameHelper.getTupleCountOffset(frame.getFrameSize()) - 4 * (tupleCount + 1), tupleDataEndOffset); ++tupleCount; IntSerDeUtils.putInt(array, FrameHelper.getTupleCountOffset(frame.getFrameSize()), tupleCount); return true;
public static void processFeedMessage(ByteBuffer input, VSizeFrame message, FrameTupleAccessor fta) throws HyracksDataException { // read the message and reduce the number of tuples fta.reset(input); int tc = fta.getTupleCount() - 1; int offset = fta.getTupleStartOffset(tc); int len = fta.getTupleLength(tc); int newSize = FrameHelper.calcAlignedFrameSizeToStore(1, len, message.getMinSize()); message.reset(); message.ensureFrameSize(newSize); message.getBuffer().clear(); message.getBuffer().put(input.array(), offset, len); message.getBuffer().flip(); IntSerDeUtils.putInt(input.array(), FrameHelper.getTupleCountOffset(input.capacity()), tc); }
tupleDataEndOffset + fTargetSlotsLength + fStartOffset, fLen); fEndOffset += fLen; IntSerDeUtils.putInt(array, tupleDataEndOffset + i * 4, fEndOffset); fStartOffset = fEndOffset; IntSerDeUtils.putInt(array, FrameHelper.getTupleCountOffset(frame.getFrameSize()) - 4 * (tupleCount + 1), tupleDataEndOffset); ++tupleCount; IntSerDeUtils.putInt(array, FrameHelper.getTupleCountOffset(frame.getFrameSize()), tupleCount); return true;
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); } }
public boolean append(ITupleReference tuple) throws HyracksDataException { int length = 0; for (int i = 0; i < tuple.getFieldCount(); i++) { length += tuple.getFieldLength(i); } if (canHoldNewTuple(tuple.getFieldCount(), length)) { length = 0; for (int i = 0; i < tuple.getFieldCount(); ++i) { length += tuple.getFieldLength(i); IntSerDeUtils.putInt(array, tupleDataEndOffset + i * 4, length); } length = 0; for (int i = 0; i < tuple.getFieldCount(); ++i) { System.arraycopy(tuple.getFieldData(i), tuple.getFieldStart(i), array, tupleDataEndOffset + tuple.getFieldCount() * 4 + length, tuple.getFieldLength(i)); length += tuple.getFieldLength(i); } tupleDataEndOffset += tuple.getFieldCount() * 4 + length; IntSerDeUtils.putInt(getBuffer().array(), FrameHelper.getTupleCountOffset(frame.getFrameSize()) - 4 * (tupleCount + 1), tupleDataEndOffset); ++tupleCount; IntSerDeUtils.putInt(getBuffer().array(), FrameHelper.getTupleCountOffset(frame.getFrameSize()), tupleCount); return true; } return false; }
/** * 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; }