@Override public int getSlotEndOff() { return frame.getBuffer().capacity() - (frame.getTupleCount() * slotSize); }
public static String printFrameTuples(ITreeIndexFrame frame, ISerializerDeserializer[] fieldSerdes) throws HyracksDataException { StringBuilder strBuilder = new StringBuilder(); ITreeIndexTupleReference tuple = frame.createTupleReference(); for (int i = 0; i < frame.getTupleCount(); i++) { tuple.resetByTupleIndex(frame, i); String tupleString = TupleUtils.printTuple(tuple, fieldSerdes); strBuilder.append(tupleString); if (i != frame.getTupleCount() - 1) { strBuilder.append(" | "); } } return strBuilder.toString(); } }
public void add(ITreeIndexFrame frame) { numPages++; numTuples += frame.getTupleCount(); sumFillFactors += (double) (frame.getBuffer().capacity() - frame.getTotalFreeSpace()) / (double) frame.getBuffer().capacity(); }
public void deleteEmptySlots() { int slotOff = getSlotStartOff(); while (frame.getTupleCount() > 0) { while (frame.getBuffer().getInt(getSlotEndOff()) == -1) { ((RTreeNSMFrame) frame).setTupleCount(frame.getTupleCount() - 1); if (frame.getTupleCount() == 0) { break; } } if (frame.getTupleCount() == 0 || slotOff <= getSlotEndOff()) { break; } if (frame.getBuffer().getInt(slotOff) == -1) { modifySlot(slotOff, frame.getBuffer().getInt(getSlotEndOff())); ((RTreeNSMFrame) frame).setTupleCount(frame.getTupleCount() - 1); } slotOff -= slotSize; } } }
@Override public boolean doHasNext() throws HyracksDataException { if (currentPageId > maxPageId) { return false; } if (tupleIndex >= frame.getTupleCount()) { boolean nextLeafExists = positionToNextLeaf(true); if (nextLeafExists) { frameTuple.resetByTupleIndex(frame, tupleIndex); return true; } else { return false; } } frameTuple.resetByTupleIndex(frame, tupleIndex); return true; }
private boolean positionToNextLeaf(boolean skipCurrent) throws HyracksDataException { while (frame.getLevel() != 0 || skipCurrent || frame.getTupleCount() == 0) { if (++currentPageId > maxPageId) { break; } releasePage(); ICachedPage nextPage = acquireNextPage(); page = nextPage; frame.setPage(page); tupleIndex = 0; skipCurrent = false; } if (currentPageId <= maxPageId) { return true; } else { return false; } }
interiorFrame.insert(mbrTuple, -1); interiorFrame.getBuffer().putInt( interiorFrame.getTupleOffset(interiorFrame.getTupleCount() - 1) + mbrTuple.getTupleSize(), prevPageId);
@Override public boolean isEmpty(ITreeIndexFrame frame, int rootPage) throws HyracksDataException { ICachedPage rootNode = bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, rootPage), false); rootNode.acquireReadLatch(); try { frame.setPage(rootNode); return frame.getLevel() == 0 && frame.getTupleCount() == 0; } finally { rootNode.releaseReadLatch(); bufferCache.unpin(rootNode); } } }
@Override public boolean isEmpty(ITreeIndexFrame frame, int rootPage) throws HyracksDataException { ICachedPage rootNode = bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, rootPage), false); rootNode.acquireReadLatch(); try { frame.setPage(rootNode); return frame.getLevel() == 0 && frame.getTupleCount() == 0; } finally { rootNode.releaseReadLatch(); bufferCache.unpin(rootNode); } }
if (lowerFrame.getTupleCount() == 0) { return; interiorFrame.getTupleOffset(interiorFrame.getTupleCount() - 1) + mbrTuple.getTupleSize(), prevNodeFrontierPages.get(level - 1)); interiorFrame.getTupleOffset(interiorFrame.getTupleCount() - 1) + mbrTuple.getTupleSize(), prevNodeFrontierPages.get(level - 1));
for (int i = 0; i < frame.getTupleCount(); ++i) { frameTuple.resetByTupleIndex(frame, i); double enlargedArea = RTreeComputationUtils.enlargedArea(frameTuple, tuple, cmp, keyValueProviders); minEnlargedArea = Double.MAX_VALUE; int k; if (frame.getTupleCount() > nearMinimumOverlapFactor) { tupleEntries1.sort(EntriesOrder.ASCENDING, frame.getTupleCount()); k = nearMinimumOverlapFactor; } else { k = frame.getTupleCount(); for (int i = 0; i < k; ++i) { double difference = 0.0; for (int j = 0; j < frame.getTupleCount(); ++j) { frameTuple.resetByTupleIndex(frame, j); cmpFrameTuple.resetByTupleIndex(frame, tupleEntries1.get(i).getTupleIndex()); for (int i = 0; i < frame.getTupleCount(); i++) { frameTuple.resetByTupleIndex(frame, i); double enlargedArea = RTreeComputationUtils.enlargedArea(frameTuple, tuple, cmp, keyValueProviders);
if (leafFrame.getTupleCount() == 0) { bufferCache.returnPage(leafFrontier.page, false); } else { leafFrontier.lastTuple.resetByTupleIndex(leafFrame, leafFrame.getTupleCount() - 1); if (verifyInput) { verifyInputTuple(tuple, leafFrontier.lastTuple); if (verifyInput && leafFrame.getTupleCount() > 0) { leafFrontier.lastTuple.resetByTupleIndex(leafFrame, leafFrame.getTupleCount() - 1); verifyInputTuple(tuple, leafFrontier.lastTuple);
@Override public int findBestChildPosition(ITreeIndexFrame frame, ITupleReference tuple, ITreeIndexTupleReference frameTuple, MultiComparator cmp) throws HyracksDataException { cmpFrameTuple.setFieldCount(cmp.getKeyFieldCount()); frameTuple.setFieldCount(cmp.getKeyFieldCount()); int bestChild = 0; double minEnlargedArea = Double.MAX_VALUE; // find minimum enlarged area, use minimum area to break tie for (int i = 0; i < frame.getTupleCount(); i++) { frameTuple.resetByTupleIndex(frame, i); double enlargedArea = RTreeComputationUtils.enlargedArea(frameTuple, tuple, cmp, keyValueProviders); if (enlargedArea < minEnlargedArea) { minEnlargedArea = enlargedArea; bestChild = i; } else if (enlargedArea == minEnlargedArea) { double area = RTreeComputationUtils.area(frameTuple, cmp, keyValueProviders); frameTuple.resetByTupleIndex(frame, bestChild); double minArea = RTreeComputationUtils.area(frameTuple, cmp, keyValueProviders); if (area < minArea) { bestChild = i; } } } return bestChild; }
@Override public int findTupleIndex(ITupleReference searchKey, ITreeIndexTupleReference frameTuple, MultiComparator multiCmp, FindTupleMode mode, FindTupleNoExactMatchPolicy matchPolicy) throws HyracksDataException { int tupleCount = frame.getTupleCount(); if (tupleCount <= 0) { return GREATEST_KEY_INDICATOR;
tuple = copyKey.getTuple(); frontier.lastTuple.resetByTupleIndex(interiorFrame, interiorFrame.getTupleCount() - 1); int splitKeySize = tupleWriter.bytesRequired(frontier.lastTuple, 0, cmp.getKeyFieldCount()); splitKey.initData(splitKeySize);
remainingTuplestoBeInsertedInRightFrame = leftRTreeFrame.getTupleCount() / 2 - rightFrame.getTupleCount(); if (remainingTuplestoBeInsertedInRightFrame == 0) { break;
if (searchKey.getFieldCount() == frameTuple.getFieldCount()) { int maxFieldPos = multiCmp.getKeyFieldCount() / 2; for (int i = 0; i < frame.getTupleCount(); i++) { frameTuple.resetByTupleIndex(frame, i);