public static int[] _quads(String name) { final byte[] b = name.getBytes(StandardCharsets.UTF_8); final int len = b.length; int[] buf = new int[(len + 3) >> 2]; int in = 0; int out = 0; int left = len; for (; left > 4; left -= 4) { buf[out++] = _decodeFull(b, in); in += 4; } buf[out++] = _decodeLast(b, in, left); return buf; }
public int addName(String name) { byte[] ch = name.getBytes(StandardCharsets.UTF_8); int len = ch.length; if (len <= 12) { if (len <= 4) { return addName(name, _decodeLast(ch, 0, len)); } int q1 = _decodeFull(ch, 0); if (len <= 8) { return addName(name, q1, _decodeLast(ch, 4, len-4)); } return addName(name, q1, _decodeFull(ch, 4), _decodeLast(ch, 8, len-8)); } int[] quads = _quads(name); return addName(name, quads, quads.length); }