package org.basex.index;
import java.util.Arrays;
import org.basex.util.hash.TokenSet;
/**
* This class caches sizes and pointers from index results.
*
* @author BaseX Team 2005-12, BSD License
* @author Sebastian Gath
*/
public final class IndexCache extends TokenSet {
/** Number of position values. */
private int[] sizes = new int[CAP];
/** Pointer on token data. */
private long[] pointers = new long[CAP];
/**
* Indexes the specified keys and values.
* @param key key
* @param s size
* @param p pointer
*/
public void add(final byte[] key, final int s, final long p) {
final int i = add(key);
if(i > 0) {
sizes[i] = s;
pointers[i] = p;
}
}
/**
* Indexes the specified keys and values.
* @param id cache id of the key
* @param s size
* @param p pointer
*/
public void update(final int id, final int s, final long p) {
sizes[id] = s;
pointers[id] = p;
}
/**
* Returns the size for the specified key.
* @param id id of the key to be found
* @return size
*/
public int size(final int id) {
return sizes[id];
}
/**
* Returns the pointer for the specified key.
* @param id id of the key to be found
* @return pointer
*/
public long pointer(final int id) {
return pointers[id];
}
@Override
protected void rehash() {
super.rehash();
final int s = size << 1;
pointers = Arrays.copyOf(pointers, s);
sizes = Arrays.copyOf(sizes, s);
}
}