private static long findUniqueValue ( CharSequence chars , int pos , long uniqueValue ) { int node = chars . charAt ( pos ++ ) ; for ( ; ; ) { if ( node < kMinLinearMatch ) { if ( node == 0 ) { node = chars . charAt ( pos ++ ) ; } uniqueValue = findUniqueValueFromBranch ( chars , pos , node + 1 , uniqueValue ) ; if ( uniqueValue == 0 ) { return 0 ; } pos = ( int ) ( uniqueValue >>> 33 ) ; node = chars . charAt ( pos ++ ) ; } else if ( node < kMinValueLead ) { // linear-match node pos += node - kMinLinearMatch + 1 ; // Ignore the match units. node = chars . charAt ( pos ++ ) ; } else { boolean isFinal = ( node & kValueIsFinal ) != 0 ; int value ; if ( isFinal ) { value = readValue ( chars , pos , node & 0x7fff ) ; } else { value = readNodeValue ( chars , pos , node ) ; } if ( uniqueValue != 0 ) { if ( value != ( int ) ( uniqueValue >> 1 ) ) { return 0 ; } } else { uniqueValue = ( ( long ) value << 1 ) | 1 ; } if ( isFinal ) { return uniqueValue ; } pos = skipNodeValue ( pos , node ) ; node &= kNodeTypeMask ; } } }
Otherwise uniqueValue is 0 . Bits 63 .. 33 are ignored .