code: 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);
      }
docs: Returns the next collation element.