UnsafeSorterSpillMerger( RecordComparator recordComparator, PrefixComparator prefixComparator, int numSpills) { Comparator<UnsafeSorterIterator> comparator = (left, right) -> { int prefixComparisonResult = prefixComparator.compare(left.getKeyPrefix(), right.getKeyPrefix()); if (prefixComparisonResult == 0) { return recordComparator.compare( left.getBaseObject(), left.getBaseOffset(), left.getRecordLength(), right.getBaseObject(), right.getBaseOffset(), right.getRecordLength()); } else { return prefixComparisonResult; } }; priorityQueue = new PriorityQueue<>(numSpills, comparator); }
UnsafeSorterSpillMerger( RecordComparator recordComparator, PrefixComparator prefixComparator, int numSpills) { Comparator<UnsafeSorterIterator> comparator = (left, right) -> { int prefixComparisonResult = prefixComparator.compare(left.getKeyPrefix(), right.getKeyPrefix()); if (prefixComparisonResult == 0) { return recordComparator.compare( left.getBaseObject(), left.getBaseOffset(), left.getRecordLength(), right.getBaseObject(), right.getBaseOffset(), right.getRecordLength()); } else { return prefixComparisonResult; } }; priorityQueue = new PriorityQueue<>(numSpills, comparator); }
UnsafeSorterSpillMerger( RecordComparator recordComparator, PrefixComparator prefixComparator, int numSpills) { Comparator<UnsafeSorterIterator> comparator = (left, right) -> { int prefixComparisonResult = prefixComparator.compare(left.getKeyPrefix(), right.getKeyPrefix()); if (prefixComparisonResult == 0) { return recordComparator.compare( left.getBaseObject(), left.getBaseOffset(), left.getRecordLength(), right.getBaseObject(), right.getBaseOffset(), right.getRecordLength()); } else { return prefixComparisonResult; } }; priorityQueue = new PriorityQueue<>(numSpills, comparator); }
@Override public int compare(RecordPointerAndKeyPrefix r1, RecordPointerAndKeyPrefix r2) { final int prefixComparisonResult = prefixComparator.compare(r1.keyPrefix, r2.keyPrefix); int uaoSize = UnsafeAlignedOffset.getUaoSize(); if (prefixComparisonResult == 0) { final Object baseObject1 = memoryManager.getPage(r1.recordPointer); final long baseOffset1 = memoryManager.getOffsetInPage(r1.recordPointer) + uaoSize; final int baseLength1 = UnsafeAlignedOffset.getSize(baseObject1, baseOffset1 - uaoSize); final Object baseObject2 = memoryManager.getPage(r2.recordPointer); final long baseOffset2 = memoryManager.getOffsetInPage(r2.recordPointer) + uaoSize; final int baseLength2 = UnsafeAlignedOffset.getSize(baseObject2, baseOffset2 - uaoSize); return recordComparator.compare(baseObject1, baseOffset1, baseLength1, baseObject2, baseOffset2, baseLength2); } else { return prefixComparisonResult; } } }
@Override public int compare(RecordPointerAndKeyPrefix r1, RecordPointerAndKeyPrefix r2) { final int prefixComparisonResult = prefixComparator.compare(r1.keyPrefix, r2.keyPrefix); int uaoSize = UnsafeAlignedOffset.getUaoSize(); if (prefixComparisonResult == 0) { final Object baseObject1 = memoryManager.getPage(r1.recordPointer); final long baseOffset1 = memoryManager.getOffsetInPage(r1.recordPointer) + uaoSize; final int baseLength1 = UnsafeAlignedOffset.getSize(baseObject1, baseOffset1 - uaoSize); final Object baseObject2 = memoryManager.getPage(r2.recordPointer); final long baseOffset2 = memoryManager.getOffsetInPage(r2.recordPointer) + uaoSize; final int baseLength2 = UnsafeAlignedOffset.getSize(baseObject2, baseOffset2 - uaoSize); return recordComparator.compare(baseObject1, baseOffset1, baseLength1, baseObject2, baseOffset2, baseLength2); } else { return prefixComparisonResult; } } }
@Override public int compare(RecordPointerAndKeyPrefix r1, RecordPointerAndKeyPrefix r2) { final int prefixComparisonResult = prefixComparator.compare(r1.keyPrefix, r2.keyPrefix); int uaoSize = UnsafeAlignedOffset.getUaoSize(); if (prefixComparisonResult == 0) { final Object baseObject1 = memoryManager.getPage(r1.recordPointer); final long baseOffset1 = memoryManager.getOffsetInPage(r1.recordPointer) + uaoSize; final int baseLength1 = UnsafeAlignedOffset.getSize(baseObject1, baseOffset1 - uaoSize); final Object baseObject2 = memoryManager.getPage(r2.recordPointer); final long baseOffset2 = memoryManager.getOffsetInPage(r2.recordPointer) + uaoSize; final int baseLength2 = UnsafeAlignedOffset.getSize(baseObject2, baseOffset2 - uaoSize); return recordComparator.compare(baseObject1, baseOffset1, baseLength1, baseObject2, baseOffset2, baseLength2); } else { return prefixComparisonResult; } } }
private int compare(int index1, int index2) { Object baseObject = dataPage.getBaseObject(); long recordAddress1 = array.get(index1); long baseOffset1 = memoryManager.getOffsetInPage(recordAddress1) + uaoSize; int recordLength1 = UnsafeAlignedOffset.getSize(baseObject, baseOffset1 - uaoSize); long recordAddress2 = array.get(index2); long baseOffset2 = memoryManager.getOffsetInPage(recordAddress2) + uaoSize; int recordLength2 = UnsafeAlignedOffset.getSize(baseObject, baseOffset2 - uaoSize); return binaryComparator.compare(baseObject, baseOffset1, recordLength1, baseObject, baseOffset2, recordLength2); }
private int compare(int index1, int index2) { Object baseObject = dataPage.getBaseObject(); long recordAddress1 = array.get(index1); long baseOffset1 = memoryManager.getOffsetInPage(recordAddress1) + uaoSize; int recordLength1 = UnsafeAlignedOffset.getSize(baseObject, baseOffset1 - uaoSize); long recordAddress2 = array.get(index2); long baseOffset2 = memoryManager.getOffsetInPage(recordAddress2) + uaoSize; int recordLength2 = UnsafeAlignedOffset.getSize(baseObject, baseOffset2 - uaoSize); return binaryComparator.compare(baseObject, baseOffset1, recordLength1, baseObject, baseOffset2, recordLength2); }
private int compare(int index1, int index2) { Object baseObject = dataPage.getBaseObject(); long recordAddress1 = array.get(index1); long baseOffset1 = memoryManager.getOffsetInPage(recordAddress1) + uaoSize; int recordLength1 = UnsafeAlignedOffset.getSize(baseObject, baseOffset1 - uaoSize); long recordAddress2 = array.get(index2); long baseOffset2 = memoryManager.getOffsetInPage(recordAddress2) + uaoSize; int recordLength2 = UnsafeAlignedOffset.getSize(baseObject, baseOffset2 - uaoSize); return binaryComparator.compare(baseObject, baseOffset1, recordLength1, baseObject, baseOffset2, recordLength2); }
@Override public int compare(RecordPointerAndKeyPrefix r1, RecordPointerAndKeyPrefix r2) { final int prefixComparisonResult = prefixComparator.compare(r1.keyPrefix, r2.keyPrefix); if (prefixComparisonResult == 0) { final Object baseObject1 = memoryManager.getPage(r1.recordPointer); final long baseOffset1 = memoryManager.getOffsetInPage(r1.recordPointer) + 4; // skip length final Object baseObject2 = memoryManager.getPage(r2.recordPointer); final long baseOffset2 = memoryManager.getOffsetInPage(r2.recordPointer) + 4; // skip length return recordComparator.compare(baseObject1, baseOffset1, baseObject2, baseOffset2); } else { return prefixComparisonResult; } } }
@Override public int compare(UnsafeSorterIterator left, UnsafeSorterIterator right) { final int prefixComparisonResult = prefixComparator.compare(left.getKeyPrefix(), right.getKeyPrefix()); if (prefixComparisonResult == 0) { return recordComparator.compare( left.getBaseObject(), left.getBaseOffset(), right.getBaseObject(), right.getBaseOffset()); } else { return prefixComparisonResult; } } };