public final long nextCE ( ) { if ( cesIndex < ceBuffer . length ) { // Return the next buffered CE. return ceBuffer . get ( cesIndex ++ ) ; } assert cesIndex == ceBuffer . length ; ceBuffer . incLength ( ) ; long cAndCE32 = handleNextCE32 ( ) ; int c = ( int ) ( cAndCE32 >> 32 ) ; int ce32 = ( int ) cAndCE32 ; int t = ce32 & 0xff ; if ( t < Collation . SPECIAL_CE32_LOW_BYTE ) { // Forced-inline of isSpecialCE32(ce32). // Normal CE from the main data. // Forced-inline of ceFromSimpleCE32(ce32). return ceBuffer . set ( cesIndex ++ , ( ( long ) ( ce32 & 0xffff0000 ) << 32 ) | ( ( long ) ( ce32 & 0xff00 ) << 16 ) | ( t << 8 ) ) ; } CollationData d ; // The compiler should be able to optimize the previous and the following // comparisons of t with the same constant. if ( t == Collation . SPECIAL_CE32_LOW_BYTE ) { if ( c < 0 ) { return ceBuffer . set ( cesIndex ++ , Collation . NO_CE ) ; } d = data . base ; ce32 = d . getCE32 ( c ) ; t = ce32 & 0xff ; if ( t < Collation . SPECIAL_CE32_LOW_BYTE ) { // Normal CE from the base data. return ceBuffer . set ( cesIndex ++ , ( ( long ) ( ce32 & 0xffff0000 ) << 32 ) | ( ( long ) ( ce32 & 0xff00 ) << 16 ) | ( t << 8 ) ) ; } } else { d = data ; } if ( t == Collation . LONG_PRIMARY_CE32_LOW_BYTE ) { // Forced-inline of ceFromLongPrimaryCE32(ce32). return ceBuffer . set ( cesIndex ++ , ( ( long ) ( ce32 - t ) << 32 ) | Collation . COMMON_SEC_AND_TER_CE ) ; } return nextCEFromCE32 ( d , c , ce32 ) ; }
Returns the next collation element .