@Override public boolean contains(int position, Page page, int[] hashChannels) { long rawHash = hashStrategy.hashRow(position, page); int hashPosition = (int) getHashPosition(rawHash, mask); // look for a slot containing this key while (groupAddressByHash[hashPosition] != -1) { if (positionNotDistinctFromCurrentRow(groupAddressByHash[hashPosition], hashPosition, position, page, (byte) rawHash, hashChannels)) { // found an existing slot for this key return true; } // increment position and mask to handle wrap around hashPosition = (hashPosition + 1) & mask; } return false; }
private int putIfAbsent(int position, Page page, long rawHash) { int hashPosition = (int) getHashPosition(rawHash, mask); // look for an empty slot or a slot containing this key int groupId = -1; while (groupAddressByHash[hashPosition] != -1) { if (positionNotDistinctFromCurrentRow(groupAddressByHash[hashPosition], hashPosition, position, page, (byte) rawHash, channels)) { // found an existing slot for this key groupId = groupIdsByHash[hashPosition]; break; } // increment position and mask to handle wrap around hashPosition = (hashPosition + 1) & mask; hashCollisions++; } // did we find an existing group? if (groupId < 0) { groupId = addNewGroup(hashPosition, position, page, rawHash); } return groupId; }
int pos = (int) getHashPosition(rawHash, newMask); while (newKey[pos] != -1) { pos = (pos + 1) & newMask;
int pos = getHashPosition(hashPosition(address), newMask); while (newKey[pos] != -1) { pos = (pos + 1) & newMask;
private int putIfAbsent(int position, Page page, int rawHash) { int hashPosition = getHashPosition(rawHash, mask); // look for an empty slot or a slot containing this key int groupId = -1; while (groupAddressByHash[hashPosition] != -1) { long address = groupAddressByHash[hashPosition]; if (positionEqualsCurrentRow(decodeSliceIndex(address), decodePosition(address), position, page)) { // found an existing slot for this key groupId = groupIdsByHash[hashPosition]; break; } // increment position and mask to handle wrap around hashPosition = (hashPosition + 1) & mask; } // did we find an existing group? if (groupId < 0) { groupId = addNewGroup(hashPosition, position, page, rawHash); } return groupId; }
@Override public boolean contains(int position, Page page, int[] hashChannels) { int rawHash = hashStrategy.hashRow(position, page.getBlocks()); int hashPosition = getHashPosition(rawHash, mask); // look for a slot containing this key while (groupAddressByHash[hashPosition] != -1) { long address = groupAddressByHash[hashPosition]; if (hashStrategy.positionEqualsRow(decodeSliceIndex(address), decodePosition(address), position, page, hashChannels)) { // found an existing slot for this key return true; } // increment position and mask to handle wrap around hashPosition = (hashPosition + 1) & mask; } return false; }