private int findOrInsertNodeForCEs ( int strength ) { assert ( Collator . PRIMARY <= strength && strength <= Collator . QUATERNARY ) ; // Find the last CE that is at least as "strong" as the requested difference. // Note: Stronger is smaller (Collator.PRIMARY=0). long ce ; for ( ; ; -- cesLength ) { if ( cesLength == 0 ) { ce = ces [ 0 ] = 0 ; cesLength = 1 ; break ; } else { ce = ces [ cesLength - 1 ] ; } if ( ceStrength ( ce ) <= strength ) { break ; } } if ( isTempCE ( ce ) ) { // No need to findCommonNode() here for lower levels // because insertTailoredNodeAfter() will do that anyway. return indexFromTempCE ( ce ) ; } // root CE if ( ( int ) ( ce >>> 56 ) == Collation . UNASSIGNED_IMPLICIT_BYTE ) { throw new UnsupportedOperationException ( "tailoring relative to an unassigned code point not supported" ) ; } return findOrInsertNodeForRootCE ( ce , strength ) ; }
Picks one of the current CEs and finds or inserts a node in the graph for the CE + strength .