private void initPriorityQueues() throws HyracksDataException { int pqInitSize = (rangeCursors.length > 0) ? rangeCursors.length : 1; tokenQueue = new PriorityQueue<>(pqInitSize, tokenQueueCmp); keyQueue = new PriorityQueue<>(pqInitSize, keyQueueCmp); tokenQueueElements = new PriorityQueueElement[pqInitSize]; keyQueueElements = new PriorityQueueElement[pqInitSize]; for (int i = 0; i < pqInitSize; i++) { tokenQueueElements[i] = new PriorityQueueElement(i); keyQueueElements[i] = new PriorityQueueElement(i); } for (int i = 0; i < rangeCursors.length; i++) { if (rangeCursors[i].hasNext()) { rangeCursors[i].next(); tokenQueueElements[i].reset(rangeCursors[i].getTuple()); tokenQueue.offer(tokenQueueElements[i]); } else { rangeCursors[i].close(); } } searchNextToken(); }
public void initPriorityQueue() throws HyracksDataException { int pqInitSize = (rangeCursors.length > 0) ? rangeCursors.length : 1; if (outputPriorityQueue == null) { outputPriorityQueue = new PriorityQueue<>(pqInitSize, pqCmp); pqes = new PriorityQueueElement[pqInitSize]; for (int i = 0; i < pqInitSize; i++) { pqes[i] = new PriorityQueueElement(i); } for (int i = 0; i < rangeCursors.length; i++) { pushIntoQueueFromCursorAndReplaceThisElement(pqes[i]); } } else { outputPriorityQueue.clear(); // did size change? if (pqInitSize == pqes.length) { // size is the same -> re-use for (int i = 0; i < rangeCursors.length; i++) { pqes[i].reset(null); pushIntoQueueFromCursorAndReplaceThisElement(pqes[i]); } } else { // size changed (due to flushes, merges, etc) -> re-create pqes = new PriorityQueueElement[pqInitSize]; for (int i = 0; i < rangeCursors.length; i++) { pqes[i] = new PriorityQueueElement(i); pushIntoQueueFromCursorAndReplaceThisElement(pqes[i]); } } } }