public final class BytesRefHash extends Object implements Accountable
BytesRefHash
is a special purpose hash-map like data-structure
optimized for BytesRef
instances. BytesRefHash maintains mappings of
byte arrays to ids (Map<BytesRef,int>) storing the hashed bytes
efficiently in continuous storage. The mapping to the id 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.
Modifier and Type | Class and Description |
---|---|
static class |
BytesRefHash.BytesStartArray
Manages allocation of the per-term addresses.
|
static class |
BytesRefHash.DirectBytesStartArray
A simple
BytesRefHash.BytesStartArray that tracks
memory allocation using a private Counter
instance. |
static class |
BytesRefHash.MaxBytesLengthExceededException
|
Modifier and Type | Field and Description |
---|---|
static int |
DEFAULT_CAPACITY |
NULL_ACCOUNTABLE
Constructor and Description |
---|
BytesRefHash()
|
BytesRefHash(ByteBlockPool pool)
Creates a new
BytesRefHash |
BytesRefHash(ByteBlockPool pool,
int capacity,
BytesRefHash.BytesStartArray bytesStartArray)
Creates a new
BytesRefHash |
Modifier and Type | Method and Description |
---|---|
int |
add(BytesRef bytes)
Adds a new
BytesRef |
int |
addByPoolOffset(int offset)
Adds a "arbitrary" int offset instead of a BytesRef
term.
|
int |
byteStart(int bytesID)
Returns the bytesStart offset into the internally used
ByteBlockPool for the given bytesID |
void |
clear() |
void |
clear(boolean resetPool)
|
void |
close()
Closes the BytesRefHash and releases all internally used memory
|
int[] |
compact()
Returns the ids array in arbitrary order.
|
int |
find(BytesRef bytes)
Returns the id of the given
BytesRef . |
BytesRef |
get(int bytesID,
BytesRef ref)
Populates and returns a
BytesRef with the bytes for the given
bytesID. |
long |
ramBytesUsed()
Return the memory usage of this object in bytes.
|
void |
reinit()
reinitializes the
BytesRefHash after a previous clear()
call. |
int |
size()
Returns the number of
BytesRef values in this BytesRefHash . |
int[] |
sort()
Returns the values array sorted by the referenced byte values.
|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
getChildResources
public static final int DEFAULT_CAPACITY
public BytesRefHash()
public BytesRefHash(ByteBlockPool pool)
BytesRefHash
public BytesRefHash(ByteBlockPool pool, int capacity, BytesRefHash.BytesStartArray bytesStartArray)
BytesRefHash
public int size()
BytesRef
values in this BytesRefHash
.BytesRef
values in this BytesRefHash
.public BytesRef get(int bytesID, BytesRef ref)
BytesRef
with the bytes for the given
bytesID.
Note: the given bytesID must be a positive integer less than the current
size (size()
)
bytesID
- the idref
- the BytesRef
to populatepublic int[] compact()
size()
- 1
Note: This is a destructive operation. clear()
must be called in
order to reuse this BytesRefHash
instance.
public int[] sort()
Note: This is a destructive operation. clear()
must be called in
order to reuse this BytesRefHash
instance.
public void clear(boolean resetPool)
public void clear()
public void close()
public int add(BytesRef bytes)
BytesRef
bytes
- the bytes to hash(-(id)-1)
. This guarantees
that the return value will always be >= 0 if the given bytes
haven't been hashed before.BytesRefHash.MaxBytesLengthExceededException
- if the given bytes are > 2 +
ByteBlockPool.BYTE_BLOCK_SIZE
public int find(BytesRef bytes)
BytesRef
.bytes
- the bytes to look for-1
if there is no mapping for the
given bytes.public int addByPoolOffset(int offset)
public void reinit()
BytesRefHash
after a previous clear()
call. If clear()
has not been called previously this method has no
effect.public int byteStart(int bytesID)
ByteBlockPool
for the given bytesIDbytesID
- the id to look upByteBlockPool
for the given idpublic long ramBytesUsed()
Accountable
ramBytesUsed
in interface Accountable
Copyright © 2000-2021 Apache Software Foundation. All Rights Reserved.