shade.com.alibaba.fastjson2.util.Fnv Maven / Gradle / Ivy
package com.alibaba.fastjson2.util;
// fnv1a 64
public final class Fnv {
public static final long MAGIC_HASH_CODE = 0xcbf29ce484222325L;
public static final long MAGIC_PRIME = 0x100000001b3L;
public static long hashCode64LCase(String name) {
boolean ascii = true;
long nameValue = 0;
int scoreCount = 0;
for (int i = 0; i < name.length(); ++i) {
char ch = name.charAt(i);
if (ch > 0xFF || (i == 0 && ch == 0)) {
ascii = false;
break;
}
if (ch == '-' || ch == '_' || ch == ' ') {
scoreCount++;
}
}
if (ascii && (name.length() - scoreCount) <= 8) {
for (int i = name.length() - 1, j = 0; i >= 0; --i) {
char ch = name.charAt(i);
if (ch == '-' || ch == '_' || ch == ' ') {
continue;
}
if (ch >= 'A' && ch <= 'Z') {
ch = (char) (ch + 32);
}
if (j == 0) {
nameValue = (byte) ch;
} else {
nameValue <<= 8;
nameValue += ch;
}
j++;
}
if (nameValue != 0) {
return nameValue;
}
}
long hashCode = MAGIC_HASH_CODE;
for (int i = 0; i < name.length(); ++i) {
char ch = name.charAt(i);
if (ch == '-' || ch == '_' || ch == ' ') {
continue;
}
if (ch >= 'A' && ch <= 'Z') {
ch = (char) (ch + 32);
}
hashCode ^= ch;
hashCode *= MAGIC_PRIME;
}
return hashCode;
}
public static long hashCode64(String... names) {
if (names.length == 1) {
return hashCode64(names[0]);
}
long hashCode = MAGIC_HASH_CODE;
for (String name : names) {
long h = hashCode64(name);
hashCode ^= h;
hashCode *= MAGIC_PRIME;
}
return hashCode;
}
public static long hashCode64(String name) {
if (name.length() <= 8) {
boolean ascii = true;
long nameValue = 0;
for (int i = 0; i < name.length(); ++i) {
char ch = name.charAt(i);
if (ch > 0xFF || (i == 0 && ch == 0)) {
ascii = false;
break;
}
}
if (ascii) {
for (int i = name.length() - 1; i >= 0; --i) {
char ch = name.charAt(i);
if (i == name.length() - 1) {
nameValue = (byte) ch;
} else {
nameValue <<= 8;
nameValue += ch;
}
}
if (nameValue != 0) {
return nameValue;
}
}
}
long hashCode = MAGIC_HASH_CODE;
for (int i = 0; i < name.length(); ++i) {
char ch = name.charAt(i);
hashCode ^= ch;
hashCode *= MAGIC_PRIME;
}
return hashCode;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy