Class CharsTrie

  • All Implemented Interfaces:
    java.lang.Cloneable, java.lang.Iterable<CharsTrie.Entry>

    public final class CharsTrie
    extends java.lang.Object
    implements java.lang.Cloneable, java.lang.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.

    • Constructor Detail

      • CharsTrie

        public CharsTrie​(java.lang.CharSequence trieChars,
                         int offset)
        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

        public CharsTrie​(CharsTrie other)
        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 Detail

      • clone

        public CharsTrie clone()
                        throws java.lang.CloneNotSupportedException
        Clones this trie reader object and its state, but not the char array which will be shared.
        Overrides:
        clone in class java.lang.Object
        Returns:
        A shallow clone of this trie.
        Throws:
        java.lang.CloneNotSupportedException
      • reset

        public CharsTrie 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(long)
      • current

        public BytesTrie.Result 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

        public BytesTrie.Result first​(int inUnit)
        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

        public BytesTrie.Result firstForCodePoint​(int cp)
        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

        public BytesTrie.Result next​(int inUnit)
        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

        public BytesTrie.Result nextForCodePoint​(int cp)
        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

        public BytesTrie.Result next​(java.lang.CharSequence s,
                                     int sIndex,
                                     int sLimit)
        Traverses the trie from the current state for this string. 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.
        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

        public int getNextChars​(java.lang.Appendable out)
        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

        public CharsTrie.Iterator iterator()
        Iterates from the current state of this trie.
        Specified by:
        iterator in interface java.lang.Iterable<CharsTrie.Entry>
        Returns:
        A new CharsTrie.Iterator.
      • iterator

        public CharsTrie.Iterator iterator​(int maxStringLength)
        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

        public static CharsTrie.Iterator iterator​(java.lang.CharSequence trieChars,
                                                  int offset,
                                                  int maxStringLength)
        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.
      • stop

        private void stop()
      • readValue

        private static int readValue​(java.lang.CharSequence chars,
                                     int pos,
                                     int leadUnit)
      • skipValue

        private static int skipValue​(int pos,
                                     int leadUnit)
      • skipValue

        private static int skipValue​(java.lang.CharSequence chars,
                                     int pos)
      • readNodeValue

        private static int readNodeValue​(java.lang.CharSequence chars,
                                         int pos,
                                         int leadUnit)
      • skipNodeValue

        private static int skipNodeValue​(int pos,
                                         int leadUnit)
      • jumpByDelta

        private static int jumpByDelta​(java.lang.CharSequence chars,
                                       int pos)
      • skipDelta

        private static int skipDelta​(java.lang.CharSequence chars,
                                     int pos)
      • branchNext

        private BytesTrie.Result branchNext​(int pos,
                                            int length,
                                            int inUnit)
      • findUniqueValueFromBranch

        private static long findUniqueValueFromBranch​(java.lang.CharSequence chars,
                                                      int pos,
                                                      int length,
                                                      long uniqueValue)
      • findUniqueValue

        private static long findUniqueValue​(java.lang.CharSequence chars,
                                            int pos,
                                            long uniqueValue)
      • getNextBranchChars

        private static void getNextBranchChars​(java.lang.CharSequence chars,
                                               int pos,
                                               int length,
                                               java.lang.Appendable out)
      • append

        private static void append​(java.lang.Appendable out,
                                   int c)