package org.basex.util.hash;
import java.util.Arrays;
import org.basex.util.TokenBuilder;
import org.basex.util.Util;
/**
* This is an efficient hash map, extending the {@link IntSet hash set}.
* @param <E> generic value type
*
* @author BaseX Team 2005-12, BSD License
* @author Christian Gruen
*/
public final class IntMap<E> extends IntSet {
/** Values. */
private Object[] values = new Object[CAP];
/**
* Indexes the specified keys and values.
* If the key exists, the value is updated.
* @param key key
* @param val value
*/
public void add(final int key, final E val) {
// array bounds are checked before array is resized..
final int i = add(key);
values[Math.abs(i)] = val;
}
/**
* Returns the value for the specified key.
* @param key key to be found
* @return value or {@code null} if nothing was found
*/
@SuppressWarnings("unchecked")
public E get(final int key) {
return (E) values[id(key)];
}
@Override
protected void rehash() {
super.rehash();
values = Arrays.copyOf(values, size << 1);
}
@Override
public String toString() {
final TokenBuilder tb = new TokenBuilder(Util.name(this)).add('[');
for(int i = 1; i < size; i++) {
tb.add(Integer.toString(keys[i])).add(": ").add(get(keys[i]).toString());
if(i < size - 1) tb.add(",\n\t");
}
return tb.add(']').toString();
}
}