public long get(final long key) { final long[] entries = this.entries; int index = evenLongHash(key, mask); long candidateKey; while ((candidateKey = entries[index]) != missingValue) { if (candidateKey == key) { return entries[index + 1]; } index = next(index); } return missingValue; }
public long get(final long key) { final long[] entries = this.entries; int index = evenLongHash(key, mask); long candidateKey; while ((candidateKey = entries[index]) != missingValue) { if (candidateKey == key) { return entries[index + 1]; } index = next(index); } return missingValue; }
private void compactChain(int deleteIndex) { final long[] entries = this.entries; int index = deleteIndex; while (true) { index = next(index); if (entries[index] == missingValue) { return; } final int hash = evenLongHash(entries[index], mask); if ((index < hash && (hash <= deleteIndex || deleteIndex <= index)) || (hash <= deleteIndex && deleteIndex <= index)) { entries[deleteIndex] = entries[index]; entries[deleteIndex + 1] = entries[index + 1]; entries[index] = missingValue; entries[index + 1] = missingValue; deleteIndex = index; } } }
private void compactChain(int deleteIndex) { final long[] entries = this.entries; int index = deleteIndex; while (true) { index = next(index); if (entries[index] == missingValue) { return; } final int hash = evenLongHash(entries[index], mask); if ((index < hash && (hash <= deleteIndex || deleteIndex <= index)) || (hash <= deleteIndex && deleteIndex <= index)) { entries[deleteIndex] = entries[index]; entries[deleteIndex + 1] = entries[index + 1]; entries[index] = missingValue; entries[index + 1] = missingValue; deleteIndex = index; } } }
public long put(final long key, final long value) { assert key != missingValue : "Invalid key " + key; assert value != missingValue : "Invalid value " + value; long oldValue = missingValue; int index = evenLongHash(key, mask); long candidateKey; while ((candidateKey = entries[index]) != missingValue) { if (candidateKey == key) { oldValue = entries[index + 1]; break; } index = next(index); } if (oldValue == missingValue) { ++size; entries[index] = key; } entries[index + 1] = value; checkResize(); return oldValue; }
public long remove(final long key) { final long[] entries = this.entries; int index = evenLongHash(key, mask); long candidateKey; while ((candidateKey = entries[index]) != missingValue) { if (candidateKey == key) { final int valueIndex = index + 1; final long oldValue = entries[valueIndex]; entries[index] = missingValue; entries[valueIndex] = missingValue; size--; compactChain(index); return oldValue; } index = next(index); } return missingValue; }
public long remove(final long key) { final long[] entries = this.entries; int index = evenLongHash(key, mask); long candidateKey; while ((candidateKey = entries[index]) != missingValue) { if (candidateKey == key) { final int valueIndex = index + 1; final long oldValue = entries[valueIndex]; entries[index] = missingValue; entries[valueIndex] = missingValue; size--; compactChain(index); return oldValue; } index = next(index); } return missingValue; }
public long put(final long key, final long value) { assert key != missingValue : "Invalid key " + key; assert value != missingValue : "Invalid value " + value; long oldValue = missingValue; int index = evenLongHash(key, mask); long candidateKey; while ((candidateKey = entries[index]) != missingValue) { if (candidateKey == key) { oldValue = entries[index + 1]; break; } index = next(index); } if (oldValue == missingValue) { ++size; entries[index] = key; } entries[index + 1] = value; checkResize(); return oldValue; }