/** * rehashes the map to the new capacity. * * @param newCapacity an <code>int</code> value */ protected void rehash(int newCapacity) { int oldCapacity = _set.length; short oldKeys[] = _set; long oldVals[] = _values; byte oldStates[] = _states; _set = new short[newCapacity]; _values = new long[newCapacity]; _states = new byte[newCapacity]; for (int i = oldCapacity; i-- > 0; ) { if (oldStates[i] == FULL) { short o = oldKeys[i]; int index = insertionIndex(o); _set[index] = o; _values[index] = oldVals[i]; _states[index] = FULL; } } }
/** * Inserts a key/value pair into the map. * * @param key an <code>short</code> value * @param value an <code>long</code> value * @return the previous value associated with <tt>key</tt>, or (short)0 if none was found. */ public long put(short key, long value) { int index = insertionIndex(key); return doPut(key, value, index); }
/** * Inserts a key/value pair into the map if the specified key is not already associated with a * value. * * @param key an <code>short</code> value * @param value an <code>long</code> value * @return the previous value associated with <tt>key</tt>, or (short)0 if none was found. */ public long putIfAbsent(short key, long value) { int index = insertionIndex(key); if (index < 0) return _values[-index - 1]; return doPut(key, value, index); }
/** * Adjusts the primitive value mapped to the key if the key is present in the map. Otherwise, * the <tt>initial_value</tt> is put in the map. * * @param key the key of the value to increment * @param adjust_amount the amount to adjust the value by * @param put_amount the value put into the map if the key is not initial present * @return the value present in the map after the adjustment or put operation * @since 2.0b1 */ public long adjustOrPutValue(final short key, final long adjust_amount, final long put_amount) { int index = insertionIndex(key); final boolean isNewMapping; final long newValue; if (index < 0) { index = -index - 1; newValue = (_values[index] += adjust_amount); isNewMapping = false; } else { newValue = (_values[index] = put_amount); isNewMapping = true; } byte previousState = _states[index]; _set[index] = key; _states[index] = FULL; if (isNewMapping) { postInsertHook(previousState == FREE); } return newValue; }