) storing the hashed bytes
efficiently in continuous storage. The mapping to the ordinal is
encapsulated inside BytesRefHash and is guaranteed to be increased
for each added BytesRef.
Note: The maximum capacity BytesRef instance passed to
add(BytesRef) must not be longer than ByteBlockPool.BYTE_BLOCK_SIZE-2.
The internal storage is limited to 2GB total byte storage.
- NOTE: This API is for internal purposes only and might change in incompatible ways in the next release.
| Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
DEFAULT_CAPACITY
public static final int DEFAULT_CAPACITY
- See Also:
- Constant Field Values
BytesRefHash
public BytesRefHash()
- Creates a new
BytesRefHash with a ByteBlockPool using a
ByteBlockPool.DirectAllocator.
BytesRefHash
public BytesRefHash(ByteBlockPool pool)
- Creates a new
BytesRefHash
BytesRefHash
public BytesRefHash(ByteBlockPool pool,
int capacity,
BytesRefHash.BytesStartArray bytesStartArray)
- Creates a new
BytesRefHash
size
public int size()
- Returns the number of
BytesRef values in this BytesRefHash.
- Returns:
- the number of
BytesRef values in this BytesRefHash.
get
public BytesRef get(int ord,
BytesRef ref)
- Populates and returns a
BytesRef with the bytes for the given ord.
Note: the given ord must be a positive integer less that the current size (
size())
- Parameters:
ord - the ordref - the BytesRef to populate
- Returns:
- the given BytesRef instance populated with the bytes for the given ord
compact
public int[] compact()
- Returns the ords array in arbitrary order. Valid ords start at offset of 0
and end at a limit of
size() - 1
Note: This is a destructive operation. clear() must be called in
order to reuse this BytesRefHash instance.
sort
public int[] sort(Comparator<BytesRef> comp)
- Returns the values array sorted by the referenced byte values.
Note: This is a destructive operation. clear() must be called in
order to reuse this BytesRefHash instance.
- Parameters:
comp - the Comparator used for sorting
clear
public void clear(boolean resetPool)
- Clears the
BytesRef which maps to the given BytesRef
clear
public void clear()
close
public void close()
- Closes the BytesRefHash and releases all internally used memory
add
public int add(BytesRef bytes)
- Adds a new
BytesRef
- Parameters:
bytes - the bytes to hash
- Returns:
- the ord the given bytes are hashed if there was no mapping for the
given bytes, otherwise
(-(ord)-1). This guarantees
that the return value will always be >= 0 if the given bytes
haven't been hashed before.
- Throws:
BytesRefHash.MaxBytesLengthExceededException - if the given bytes are > 2 +
ByteBlockPool.BYTE_BLOCK_SIZE
add
public int add(BytesRef bytes,
int code)
- Adds a new
BytesRef with a pre-calculated hash code.
- Parameters:
bytes - the bytes to hashcode - the bytes hash code
Hashcode is defined as:
int hash = 0;
for (int i = offset; i < offset + length; i++) {
hash = 31 * hash + bytes[i];
}
- Returns:
- the ord the given bytes are hashed if there was no mapping for the
given bytes, otherwise
(-(ord)-1). This guarantees
that the return value will always be >= 0 if the given bytes
haven't been hashed before.
- Throws:
BytesRefHash.MaxBytesLengthExceededException - if the given bytes are >
ByteBlockPool.BYTE_BLOCK_SIZE - 2
addByPoolOffset
public int addByPoolOffset(int offset)
reinit
public void reinit()
- reinitializes the
BytesRefHash after a previous clear()
call. If clear() has not been called previously this method has no
effect.
byteStart
public int byteStart(int ord)
- Returns the bytesStart offset into the internally used
ByteBlockPool for the given ord
- Parameters:
ord - the ord to look up
- Returns:
- the bytesStart offset into the internally used
ByteBlockPool for the given ord