code: public final long previousCE(UVector32 offsets) {
          if(ceBuffer.length > 0) {
              // Return the previous buffered CE.
              return ceBuffer.get(--ceBuffer.length);
          }
          offsets.removeAllElements();
          int limitOffset = getOffset();
          int c = previousCodePoint();
          if(c < 0) { return Collation.NO_CE; }
          if(data.isUnsafeBackward(c, isNumeric)) {
              return previousCEUnsafe(c, offsets);
          }
          // Simple, safe-backwards iteration:
          // Get a CE going backwards, handle prefixes but no contractions.
          int ce32 = data.getCE32(c);
          CollationData d;
          if(ce32 == Collation.FALLBACK_CE32) {
              d = data.base;
              ce32 = d.getCE32(c);
          } else {
              d = data;
          }
          if(Collation.isSimpleOrLongCE32(ce32)) {
              return Collation.ceFromCE32(ce32);
          }
          appendCEsFromCE32(d, c, ce32, false);
          if(ceBuffer.length > 1) {
              offsets.addElement(getOffset());
              // For an expansion, the offset of each non-initial CE is the limit offset,
              // consistent with forward iteration.
              while(offsets.size() <= ceBuffer.length) {
                  offsets.addElement(limitOffset);
              };
          }
          return ceBuffer.get(--ceBuffer.length);
      }
docs: Returns the previous collation element.