/** * @return -1 if not enough contiguous space surrounding search vector */ private int allocPageEntry(int encodedLen, int leftSpace, int rightSpace) { final int entryLoc; if (encodedLen <= leftSpace && leftSpace >= rightSpace) { // Allocate entry from left segment. entryLoc = leftSegTail(); leftSegTail(entryLoc + encodedLen); } else if (encodedLen <= rightSpace) { // Allocate entry from right segment. entryLoc = rightSegTail() - encodedLen + 1; rightSegTail(entryLoc - 1); } else { // No room. return -1; } return entryLoc; }
/** * @return -1 if not enough contiguous space surrounding search vector */ private int allocPageEntry(int encodedLen, int leftSpace, int rightSpace) { final int entryLoc; if (encodedLen <= leftSpace && leftSpace >= rightSpace) { // Allocate entry from left segment. entryLoc = leftSegTail(); leftSegTail(entryLoc + encodedLen); } else if (encodedLen <= rightSpace) { // Allocate entry from right segment. entryLoc = rightSegTail() - encodedLen + 1; rightSegTail(entryLoc - 1); } else { // No room. return -1; } return entryLoc; }
/** * @return -1 if not enough contiguous space surrounding search vector */ private int allocPageEntry(int encodedLen, int leftSpace, int rightSpace) { final int entryLoc; if (encodedLen <= leftSpace && leftSpace >= rightSpace) { // Allocate entry from left segment. entryLoc = leftSegTail(); leftSegTail(entryLoc + encodedLen); } else if (encodedLen <= rightSpace) { // Allocate entry from right segment. entryLoc = rightSegTail() - encodedLen + 1; rightSegTail(entryLoc - 1); } else { // No room. return -1; } return entryLoc; }
/** * Caller must hold any latch. */ int availableInternalBytes() { return garbage() + 5 * (searchVecStart() - searchVecEnd()) - leftSegTail() + rightSegTail() + (1 - (5 * 2 + 8)); }
/** * Caller must hold any latch. */ int availableLeafBytes() { return garbage() + searchVecStart() - searchVecEnd() - leftSegTail() + rightSegTail() + (1 - 2); }
/** * Caller must hold any latch. */ int availableInternalBytes() { return garbage() + 5 * (searchVecStart() - searchVecEnd()) - leftSegTail() + rightSegTail() + (1 - (5 * 2 + 8)); }
/** * Caller must hold any latch. */ int availableLeafBytes() { return garbage() + searchVecStart() - searchVecEnd() - leftSegTail() + rightSegTail() + (1 - 2); }
/** * Caller must hold any latch. */ int availableInternalBytes() { return garbage() + 5 * (searchVecStart() - searchVecEnd()) - leftSegTail() + rightSegTail() + (1 - (5 * 2 + 8)); }
/** * Caller must hold any latch. */ int availableLeafBytes() { return garbage() + searchVecStart() - searchVecEnd() - leftSegTail() + rightSegTail() + (1 - 2); }
private void clearEntries() { garbage(0); leftSegTail(TN_HEADER_SIZE); int pageSize = pageSize(mPage); rightSegTail(pageSize - 1); // Search vector location must be even. searchVecStart((TN_HEADER_SIZE + ((pageSize - TN_HEADER_SIZE) >> 1)) & ~1); searchVecEnd(searchVecStart() - 2); // inclusive }
private void clearEntries() { garbage(0); leftSegTail(TN_HEADER_SIZE); int pageSize = pageSize(mPage); rightSegTail(pageSize - 1); // Search vector location must be even. searchVecStart((TN_HEADER_SIZE + ((pageSize - TN_HEADER_SIZE) >> 1)) & ~1); searchVecEnd(searchVecStart() - 2); // inclusive }
private void clearEntries() { garbage(0); leftSegTail(TN_HEADER_SIZE); int pageSize = pageSize(mPage); rightSegTail(pageSize - 1); // Search vector location must be even. searchVecStart((TN_HEADER_SIZE + ((pageSize - TN_HEADER_SIZE) >> 1)) & ~1); searchVecEnd(searchVecStart() - 2); // inclusive }
int searchVecEnd = searchVecEnd(); int leftSpace = searchVecStart - leftSegTail(); int rightSpace = rightSegTail() - searchVecEnd - ((searchVecEnd - searchVecStart) << 2) - 17; entryLoc = leftSegTail(); leftSegTail(entryLoc + encodedLen); } else if ((leftSegTail() & 1) == 0) { newSearchVecStart = leftSegTail() + ((remaining >> 1) & ~1);
int searchVecEnd = searchVecEnd(); int leftSpace = searchVecStart - leftSegTail(); int rightSpace = rightSegTail() - searchVecEnd - ((searchVecEnd - searchVecStart) << 2) - 17; entryLoc = leftSegTail(); leftSegTail(entryLoc + encodedLen); } else if ((leftSegTail() & 1) == 0) { newSearchVecStart = leftSegTail() + ((remaining >> 1) & ~1);
int searchVecEnd = searchVecEnd(); int leftSpace = searchVecStart - leftSegTail(); int rightSpace = rightSegTail() - searchVecEnd - ((searchVecEnd - searchVecStart) << 2) - 17; entryLoc = leftSegTail(); leftSegTail(entryLoc + encodedLen); } else if ((leftSegTail() & 1) == 0) { newSearchVecStart = leftSegTail() + ((remaining >> 1) & ~1);
/** * Prepares the node for appending entries out-of-order, and then sorting them. * * @see appendToSortLeaf */ void asSortLeaf() { type((byte) (TYPE_TN_LEAF | LOW_EXTREMITY | HIGH_EXTREMITY)); garbage(0); leftSegTail(TN_HEADER_SIZE); int pageSize = pageSize(mPage); rightSegTail(pageSize - 1); // Position search vector on the left side, but appendToSortLeaf will move it to the // right. It's not safe to position an empty search vector on the right side, because // the inclusive start position would wrap around for the largest page size. searchVecStart(TN_HEADER_SIZE); searchVecEnd(TN_HEADER_SIZE - 2); // inclusive }
int searchVecCap = garbage() + rightSegTail() + 1 - leftSegTail() - encodedLen; newSearchVecStart = pageSize(page) - (((searchVecCap + newSearchVecSize) >> 1) & ~1); leftSegTail(destLoc + encodedLen); rightSegTail(pageSize(dest) - 1); searchVecStart(newSearchVecStart);
int searchVecCap = garbage() + rightSegTail() + 1 - leftSegTail() - encodedLen; newSearchVecStart = pageSize(page) - (((searchVecCap + newSearchVecSize) >> 1) & ~1); leftSegTail(destLoc + encodedLen); rightSegTail(pageSize(dest) - 1); searchVecStart(newSearchVecStart);
p_shortPutLE(newPage, pageSize(newPage) - 2, TN_HEADER_SIZE); newNode.leftSegTail(TN_HEADER_SIZE + encodedLen); newNode.releaseExclusive();
p_intPutLE(newRootPage, 0, newType & 0xff); // type, reserved byte, and garbage /*P*/ // ] leftSegTail(leftSegTail); rightSegTail(pageSize(newRootPage) - 1); searchVecStart(searchVecStart);