Package com.ibm.icu.util
Class CharsTrie
java.lang.Object
com.ibm.icu.util.CharsTrie
- All Implemented Interfaces:
Cloneable
,Iterable<CharsTrie.Entry>
Light-weight, non-const reader class for a CharsTrie.
Traverses a char-serialized data structure with minimal state,
for mapping strings (16-bit-unit 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 (string, value) pairs in a CharsTrie.static final class
CharsTrie state object, for saving a trie's current state and resetting the trie back to this state later. -
Constructor Summary
ConstructorsConstructorDescriptionCopy constructor.CharsTrie
(CharSequence trieChars, int offset) Constructs a CharsTrie reader instance. -
Method Summary
Modifier and TypeMethodDescriptionclone()
Clones this trie reader object and its state, but not the char array which will be shared.current()
Determines whether the string so far matches, whether it has a value, and whether another input char can continue a matching string.first
(int inUnit) Traverses the trie from the initial state for this input char.firstForCodePoint
(int cp) Traverses the trie from the initial state for the one or two UTF-16 code units for this input code point.int
getNextChars
(Appendable out) Finds each char which continues the string from the current state.long
Returns the state of this trie as a 64-bit integer.long
Determines whether all strings reachable from the current state map to the same value, and if so, returns that value.int
getValue()
Returns a matching string'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.iterator
(int maxStringLength) Iterates from the current state of this trie.static CharsTrie.Iterator
iterator
(CharSequence trieChars, int offset, int maxStringLength) Iterates from the root of a char-serialized BytesTrie.next
(int inUnit) Traverses the trie from the current state for this input char.next
(CharSequence s, int sIndex, int sLimit) Traverses the trie from the current state for this string.nextForCodePoint
(int cp) Traverses the trie from the current state for the one or two UTF-16 code units for this input code point.reset()
Resets this trie to its initial state.resetToState
(CharsTrie.State state) Resets this trie to the saved state.resetToState64
(long state) Resets this trie to the saved state.saveState
(CharsTrie.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
-
CharsTrie
Constructs a CharsTrie reader instance.The CharSequence must contain a copy of a char sequence from the CharsTrieBuilder, with the offset indicating the first char of that sequence. The CharsTrie object will not read more chars than the CharsTrieBuilder generated in the corresponding build() call.
The CharSequence is not copied/cloned and must not be modified while the CharsTrie object is in use.
- Parameters:
trieChars
- CharSequence that contains the serialized trie.offset
- Root offset of the trie in the CharSequence.
-
CharsTrie
Copy constructor. Makes a shallow copy of the other trie reader object and its state. Does not copy the char 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 char 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 string so far matches, whether it has a value, and whether another input char can continue a matching string.- Returns:
- The match/value Result.
-
first
Traverses the trie from the initial state for this input char. Equivalent to reset().next(inUnit).- Parameters:
inUnit
- Input char value. Values below 0 and above 0xffff will never match.- Returns:
- The match/value Result.
-
firstForCodePoint
Traverses the trie from the initial state for the one or two UTF-16 code units for this input code point. Equivalent to reset().nextForCodePoint(cp).- Parameters:
cp
- A Unicode code point 0..0x10ffff.- Returns:
- The match/value Result.
-
next
Traverses the trie from the current state for this input char.- Parameters:
inUnit
- Input char value. Values below 0 and above 0xffff will never match.- Returns:
- The match/value Result.
-
nextForCodePoint
Traverses the trie from the current state for the one or two UTF-16 code units for this input code point.- Parameters:
cp
- A Unicode code point 0..0x10ffff.- Returns:
- The match/value Result.
-
next
Traverses the trie from the current state for this string. 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.sIndex
- The start index of the string in s.sLimit
- The (exclusive) end index of the string in s.- Returns:
- The match/value Result.
-
getValue
public int getValue()Returns a matching string'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 string so far.
-
getUniqueValue
public long getUniqueValue()Determines whether all strings 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 strings reachable from the current state map to the same value; otherwise returns 0.
-
getNextChars
Finds each char which continues the string from the current state. That is, each char c for which it would be next(c)!=Result.NO_MATCH now.- Parameters:
out
- Each next char is appended to this object. (Only uses the out.append(c) method.)- Returns:
- The number of chars which continue the string from here.
-
iterator
Iterates from the current state of this trie.- Specified by:
iterator
in interfaceIterable<CharsTrie.Entry>
- Returns:
- A new CharsTrie.Iterator.
-
iterator
Iterates from the current state of this trie.- Parameters:
maxStringLength
- If 0, the iterator returns full strings. Otherwise, the iterator returns strings with this maximum length.- Returns:
- A new CharsTrie.Iterator.
-
iterator
Iterates from the root of a char-serialized BytesTrie.- Parameters:
trieChars
- CharSequence that contains the serialized trie.offset
- Root offset of the trie in the CharSequence.maxStringLength
- If 0, the iterator returns full strings. Otherwise, the iterator returns strings with this maximum length.- Returns:
- A new CharsTrie.Iterator.
-