public String intern(@NotNull final Bytes bytes, int length) {
try {
int hash32 = BytesStoreHash.hash32(bytes, length);
int h = hash32 & mask;
String s = interner[h];
long position = bytes.readPosition();
if (BytesUtil.bytesEqual(s, bytes, position, length))
return s;
int h2 = (hash32 >> shift) & mask;
String s2 = interner[h2];
if (BytesUtil.bytesEqual(s2, bytes, position, length))
return s2;
char[] chars = toCharArray(bytes, position, length);
return interner[s == null || (s2 != null && toggle()) ? h : h2] = StringUtils.newString(chars);
} finally {
bytes.readSkip(length);
}
}
}