@Override public void copyNormalizedKey(MemorySegment target, int offset, int len) { if (len == 1) { // default case, full normalized key. need to explicitly convert to int to // avoid false results due to implicit type conversion to int when subtracting // the min byte value int highByte = this.value & 0xff; highByte -= Byte.MIN_VALUE; target.put(offset, (byte) highByte); } else if (len <= 0) { } else { int highByte = this.value & 0xff; highByte -= Byte.MIN_VALUE; target.put(offset, (byte) highByte); for (int i = 1; i < len; i++) { target.put(offset + i, (byte) 0); } } }
@Override public void putNormalizedKey(String record, MemorySegment target, int offset, int len) { ; final int limit = offset + len; final int end = record.length(); int pos = 0; while (pos < end && offset < limit) { char c = record.charAt(pos++); if (c < HIGH_BIT) { target.put(offset++, (byte) c); } else if (c < HIGH_BIT2) { target.put(offset++, (byte) ((c >>> 7) | HIGH_BIT)); if (offset < limit) target.put(offset++, (byte) c); } else { target.put(offset++, (byte) ((c >>> 10) | HIGH_BIT2_MASK)); if (offset < limit) target.put(offset++, (byte) (c >>> 2)); if (offset < limit) target.put(offset++, (byte) c); } } while (offset < limit) { target.put(offset++, (byte) 0); } }