/** * {@inheritDoc} */ public boolean contains(final long value) { final long[] values = this.values; @DoNotSub final int mask = values.length - 1; @DoNotSub int index = Hashing.hash(value, mask); while (values[index] != missingValue) { if (values[index] == value) { return true; } index = next(index, mask); } return false; }
/** * {@inheritDoc} */ public boolean contains(final long value) { if (value == MISSING_VALUE) { return containsMissingValue; } final long[] values = this.values; @DoNotSub final int mask = values.length - 1; @DoNotSub int index = Hashing.hash(value, mask); while (values[index] != MISSING_VALUE) { if (values[index] == value) { return true; } index = next(index, mask); } return false; }
/** * An long specialised version of {this#remove(Object)}. * * @param value the value to remove * @return true if the value was present, false otherwise */ public boolean remove(final long value) { final long[] values = this.values; @DoNotSub final int mask = values.length - 1; @DoNotSub int index = Hashing.hash(value, mask); while (values[index] != missingValue) { if (values[index] == value) { values[index] = missingValue; compactChain(index); size--; return true; } index = next(index, mask); } return false; }
/** * An long specialised version of {this#remove(Object)}. * * @param value the value to remove * @return true if the value was present, false otherwise */ public boolean remove(final long value) { if (value == MISSING_VALUE) { final boolean previousContainsMissingValue = this.containsMissingValue; containsMissingValue = false; return previousContainsMissingValue; } final long[] values = this.values; @DoNotSub final int mask = values.length - 1; @DoNotSub int index = Hashing.hash(value, mask); while (values[index] != MISSING_VALUE) { if (values[index] == value) { values[index] = MISSING_VALUE; compactChain(index); sizeOfArrayValues--; return true; } index = next(index, mask); } return false; }
/** * Primitive specialised overload of {this#add(Long)} * * @param value the value to add * @return true if the collection has changed, false otherwise */ public boolean add(final long value) { final long[] values = this.values; @DoNotSub final int mask = values.length - 1; @DoNotSub int index = Hashing.hash(value, mask); while (values[index] != missingValue) { if (values[index] == value) { return false; } index = next(index, mask); } values[index] = value; size++; if (size > resizeThreshold) { increaseCapacity(); } return true; }
index = next(index, mask);
@DoNotSub void compactChain(int deleteIndex) { final long[] values = this.values; @DoNotSub final int mask = values.length - 1; @DoNotSub int index = deleteIndex; while (true) { index = next(index, mask); if (values[index] == missingValue) { return; } @DoNotSub final int hash = Hashing.hash(values[index], mask); if ((index < hash && (hash <= deleteIndex || deleteIndex <= index)) || (hash <= deleteIndex && deleteIndex <= index)) { values[deleteIndex] = values[index]; values[index] = missingValue; deleteIndex = index; } } }
@SuppressWarnings("FinalParameters") @DoNotSub void compactChain(int deleteIndex) { final long[] values = this.values; @DoNotSub final int mask = values.length - 1; @DoNotSub int index = deleteIndex; while (true) { index = next(index, mask); if (values[index] == MISSING_VALUE) { return; } @DoNotSub final int hash = Hashing.hash(values[index], mask); if ((index < hash && (hash <= deleteIndex || deleteIndex <= index)) || (hash <= deleteIndex && deleteIndex <= index)) { values[deleteIndex] = values[index]; values[index] = MISSING_VALUE; deleteIndex = index; } } }