private final void cleanBucket(int bucket) { int nextInArray = signSafeMod(bucket + 1, capacity); if (values[nextInArray] == EmptyValue) { values[bucket] = (V) EmptyValue; --usedBuckets; } else { values[bucket] = (V) DeletedValue; } }
private static <V> void insertValueNoLock(V[] values, V value) { int bucket = (int) hash(value); while (true) { bucket = signSafeMod(bucket, values.length); V storedValue = values[bucket]; if (storedValue == EmptyValue) { // The bucket is empty, so we can use it values[bucket] = value; return; } ++bucket; } } }
private boolean remove(V value, int keyHash) { int bucket = keyHash; long stamp = writeLock(); try { while (true) { int capacity = this.capacity; bucket = signSafeMod(bucket, capacity); V storedValue = values[bucket]; if (value.equals(storedValue)) { --size; cleanBucket(bucket); return true; } else if (storedValue == EmptyValue) { // Value wasn't found return false; } ++bucket; } } finally { unlockWrite(stamp); } }
while (true) { int capacity = this.capacity; bucket = signSafeMod(bucket, capacity);
bucket = signSafeMod(bucket, capacity);
private final void cleanBucket(int bucket) { int nextInArray = signSafeMod(bucket + 1, capacity); if (values[nextInArray] == EmptyValue) { values[bucket] = (V) EmptyValue; --usedBuckets; } else { values[bucket] = (V) DeletedValue; } }
private static <V> void insertValueNoLock(V[] values, V value) { int bucket = (int) hash(value); while (true) { bucket = signSafeMod(bucket, values.length); V storedValue = values[bucket]; if (storedValue == EmptyValue) { // The bucket is empty, so we can use it values[bucket] = value; return; } ++bucket; } } }
private boolean remove(V value, int keyHash) { int bucket = keyHash; long stamp = writeLock(); try { while (true) { int capacity = this.capacity; bucket = signSafeMod(bucket, capacity); V storedValue = values[bucket]; if (value.equals(storedValue)) { --size; cleanBucket(bucket); return true; } else if (storedValue == EmptyValue) { // Value wasn't found return false; } ++bucket; } } finally { unlockWrite(stamp); } }
while (true) { int capacity = this.capacity; bucket = signSafeMod(bucket, capacity);
bucket = signSafeMod(bucket, capacity);