com.ibm.icu.util
Class BytesTrie

java.lang.Object
  extended by com.ibm.icu.util.BytesTrie
All Implemented Interfaces:
Cloneable, Iterable<BytesTrie.Entry>

public final class BytesTrie
extends Object
implements 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
Status:
Draft ICU 4.8.

Nested Class Summary
static class BytesTrie.Entry
          Return value type for the Iterator.
static class BytesTrie.Iterator
          Iterator for all of the (byte sequence, value) pairs in a BytesTrie.
static class BytesTrie.Result
          Return values for BytesTrie.next(), CharsTrie.next() and similar methods.
static class BytesTrie.State
          BytesTrie state object, for saving a trie's current state and resetting the trie back to this state later.
 
Constructor Summary
BytesTrie(byte[] trieBytes, int offset)
          Constructs a BytesTrie reader instance.
 
Method Summary
 Object clone()
          Clones this trie reader object and its state, but not the byte array which will be shared.
 BytesTrie.Result 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.
 BytesTrie.Result 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 getUniqueValue()
          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.
 BytesTrie.Iterator 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.
 BytesTrie.Iterator iterator(int maxStringLength)
          Iterates from the current state of this trie.
 BytesTrie.Result next(byte[] s, int sIndex, int sLimit)
          Traverses the trie from the current state for this byte sequence.
 BytesTrie.Result next(int inByte)
          Traverses the trie from the current state for this input byte.
 BytesTrie reset()
          Resets this trie to its initial state.
 BytesTrie resetToState(BytesTrie.State state)
          Resets this trie to the saved state.
 BytesTrie 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
 

Constructor Detail

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.
Status:
Draft ICU 4.8.
Method Detail

clone

public Object clone()
             throws CloneNotSupportedException
Clones this trie reader object and its state, but not the byte array which will be shared.

Overrides:
clone in class Object
Returns:
A shallow clone of this trie.
Throws:
CloneNotSupportedException
Status:
Draft ICU 4.8.

reset

public BytesTrie reset()
Resets this trie to its initial state.

Returns:
this
Status:
Draft ICU 4.8.

saveState

public BytesTrie saveState(BytesTrie.State state)
Saves the state of this trie.

Parameters:
state - The State object to hold the trie's state.
Returns:
this
See Also:
resetToState(com.ibm.icu.util.BytesTrie.State)
Status:
Draft ICU 4.8.

resetToState

public BytesTrie resetToState(BytesTrie.State state)
Resets this trie to the saved state.

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:
saveState(com.ibm.icu.util.BytesTrie.State), reset()
Status:
Draft ICU 4.8.

current

public BytesTrie.Result 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.
Status:
Draft ICU 4.8.

first

public BytesTrie.Result first(int inByte)
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.
Status:
Draft ICU 4.8.

next

public BytesTrie.Result next(int inByte)
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.
Status:
Draft ICU 4.8.

next

public BytesTrie.Result next(byte[] s,
                             int sIndex,
                             int sLimit)
Traverses the trie from the current state for this byte sequence. Equivalent to
 Result 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.
Status:
Draft ICU 4.8.

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.
Status:
Draft ICU 4.8.

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.
Status:
Draft ICU 4.8.

getNextBytes

public int getNextBytes(Appendable out)
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.
Status:
Draft ICU 4.8.

iterator

public BytesTrie.Iterator iterator()
Iterates from the current state of this trie.

Specified by:
iterator in interface Iterable<BytesTrie.Entry>
Returns:
A new BytesTrie.Iterator.
Status:
Draft ICU 4.8.

iterator

public BytesTrie.Iterator iterator(int maxStringLength)
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.
Status:
Draft ICU 4.8.

iterator

public static BytesTrie.Iterator iterator(byte[] trieBytes,
                                          int offset,
                                          int maxStringLength)
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.
Status:
Draft ICU 4.8.


Copyright (c) 2011 IBM Corporation and others.