Package com.ibm.icu.util
Class BytesTrie
java.lang.Object
com.ibm.icu.util.BytesTrie
- All Implemented Interfaces:
Cloneable
,Iterable<BytesTrie.Entry>
Light-weight, non-const reader class for a BytesTrie.
Traverses a byte-serialized data structure with minimal state,
for mapping byte sequences to non-negative integer values.
This class is not intended for public subclassing.
- Author:
- Markus W. Scherer
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic final class
Return value type for the Iterator.static final class
Iterator for all of the (byte sequence, value) pairs in a BytesTrie.static enum
Return values for BytesTrie.next(), CharsTrie.next() and similar methods.static final class
BytesTrie state object, for saving a trie's current state and resetting the trie back to this state later. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionclone()
Clones this trie reader object and its state, but not the byte array which will be shared.current()
Determines whether the byte sequence so far matches, whether it has a value, and whether another input byte can continue a matching byte sequence.first
(int inByte) Traverses the trie from the initial state for this input byte.int
getNextBytes
(Appendable out) Finds each byte which continues the byte sequence from the current state.long
Returns the state of this trie as a 64-bit integer.long
Determines whether all byte sequences reachable from the current state map to the same value, and if so, returns that value.int
getValue()
Returns a matching byte sequence's value if called immediately after current()/first()/next() returned Result.INTERMEDIATE_VALUE or Result.FINAL_VALUE.iterator()
Iterates from the current state of this trie.static BytesTrie.Iterator
iterator
(byte[] trieBytes, int offset, int maxStringLength) Iterates from the root of a byte-serialized BytesTrie.iterator
(int maxStringLength) Iterates from the current state of this trie.static int
jumpByDelta
(byte[] bytes, int pos) Deprecated.This API is ICU internal only.next
(byte[] s, int sIndex, int sLimit) Traverses the trie from the current state for this byte sequence.next
(int inByte) Traverses the trie from the current state for this input byte.reset()
Resets this trie to its initial state.resetToState
(BytesTrie.State state) Resets this trie to the saved state.resetToState64
(long state) Resets this trie to the saved state.saveState
(BytesTrie.State state) Saves the state of this trie.Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface java.lang.Iterable
forEach, spliterator
-
Constructor Details
-
BytesTrie
public BytesTrie(byte[] trieBytes, int offset) Constructs a BytesTrie reader instance.The array must contain a copy of a byte sequence from the BytesTrieBuilder, with the offset indicating the first byte of that sequence. The BytesTrie object will not read more bytes than the BytesTrieBuilder generated in the corresponding build() call.
The array is not copied/cloned and must not be modified while the BytesTrie object is in use.
- Parameters:
trieBytes
- Bytes array that contains the serialized trie.offset
- Root offset of the trie in the array.
-
BytesTrie
Copy constructor. Makes a shallow copy of the other trie reader object and its state. Does not copy the byte array which will be shared. Same as clone() but without the throws clause.
-
-
Method Details
-
clone
Clones this trie reader object and its state, but not the byte array which will be shared.- Overrides:
clone
in classObject
- Returns:
- A shallow clone of this trie.
- Throws:
CloneNotSupportedException
-
reset
Resets this trie to its initial state.- Returns:
- this
-
getState64
public long getState64()Returns the state of this trie as a 64-bit integer. The state value is never 0.- Returns:
- opaque state value
- See Also:
-
resetToState64
Resets this trie to the saved state. UnlikeresetToState(State)
, the 64-bit state value must be fromgetState64()
from the same trie object or from one initialized the exact same way. Because of no validation, this method is faster.- Parameters:
state
- The opaque trie state value from getState64().- Returns:
- this
- See Also:
-
saveState
Saves the state of this trie.- Parameters:
state
- The State object to hold the trie's state.- Returns:
- this
- See Also:
-
resetToState
Resets this trie to the saved state. Slower thanresetToState64(long)
which does not validate the state value.- Parameters:
state
- The State object which holds a saved trie state.- Returns:
- this
- Throws:
IllegalArgumentException
- if the state object contains no state, or the state of a different trie- See Also:
-
current
Determines whether the byte sequence so far matches, whether it has a value, and whether another input byte can continue a matching byte sequence.- Returns:
- The match/value Result.
-
first
Traverses the trie from the initial state for this input byte. Equivalent to reset().next(inByte).- Parameters:
inByte
- Input byte value. Values -0x100..-1 are treated like 0..0xff. Values below -0x100 and above 0xff will never match.- Returns:
- The match/value Result.
-
next
Traverses the trie from the current state for this input byte.- Parameters:
inByte
- Input byte value. Values -0x100..-1 are treated like 0..0xff. Values below -0x100 and above 0xff will never match.- Returns:
- The match/value Result.
-
next
Traverses the trie from the current state for this byte sequence. Equivalent toResult result=current(); for(each c in s) if(!result.hasNext()) return Result.NO_MATCH; result=next(c); return result;
- Parameters:
s
- Contains a string or byte sequence.sIndex
- The start index of the byte sequence in s.sLimit
- The (exclusive) end index of the byte sequence in s.- Returns:
- The match/value Result.
-
getValue
public int getValue()Returns a matching byte sequence's value if called immediately after current()/first()/next() returned Result.INTERMEDIATE_VALUE or Result.FINAL_VALUE. getValue() can be called multiple times. Do not call getValue() after Result.NO_MATCH or Result.NO_VALUE!- Returns:
- The value for the byte sequence so far.
-
getUniqueValue
public long getUniqueValue()Determines whether all byte sequences reachable from the current state map to the same value, and if so, returns that value.- Returns:
- The unique value in bits 32..1 with bit 0 set, if all byte sequences reachable from the current state map to the same value; otherwise returns 0.
-
getNextBytes
Finds each byte which continues the byte sequence from the current state. That is, each byte b for which it would be next(b)!=Result.NO_MATCH now.- Parameters:
out
- Each next byte is 0-extended to a char and appended to this object. (Only uses the out.append(c) method.)- Returns:
- The number of bytes which continue the byte sequence from here.
-
iterator
Iterates from the current state of this trie.- Specified by:
iterator
in interfaceIterable<BytesTrie.Entry>
- Returns:
- A new BytesTrie.Iterator.
-
iterator
Iterates from the current state of this trie.- Parameters:
maxStringLength
- If 0, the iterator returns full strings/byte sequences. Otherwise, the iterator returns strings with this maximum length.- Returns:
- A new BytesTrie.Iterator.
-
iterator
Iterates from the root of a byte-serialized BytesTrie.- Parameters:
trieBytes
- Bytes array that contains the serialized trie.offset
- Root offset of the trie in the array.maxStringLength
- If 0, the iterator returns full strings/byte sequences. Otherwise, the iterator returns strings with this maximum length.- Returns:
- A new BytesTrie.Iterator.
-
jumpByDelta
Deprecated.This API is ICU internal only.Reads a jump delta and jumps.
-