react-native-unistyles
Version:
Level up your React Native StyleSheet
54 lines (46 loc) • 1.43 kB
text/typescript
/*
Authors: Gary Court and Austin Appleby
Compatible with React Native Web
https://github.com/necolas/react-native-web/blob/master/packages/react-native-web/src/exports/StyleSheet/compiler/hash.js#L65
*/
export const murmurhash2_32_gc = (str: string, seed: number) => {
let l = str.length
let h = seed ^ l
let i = 0
let k
while (l >= 4) {
k =
(str.charCodeAt(i) & 0xff) |
((str.charCodeAt(++i) & 0xff) << 8) |
((str.charCodeAt(++i) & 0xff) << 16) |
((str.charCodeAt(++i) & 0xff) << 24)
k =
(k & 0xffff) * 0x5bd1e995 + ((((k >>> 16) * 0x5bd1e995) & 0xffff) << 16)
k ^= k >>> 24
k =
(k & 0xffff) * 0x5bd1e995 + ((((k >>> 16) * 0x5bd1e995) & 0xffff) << 16)
h =
((h & 0xffff) * 0x5bd1e995 +
((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16)) ^
k
l -= 4
++i
}
switch (l) {
// @ts-ignore
case 3:
h ^= (str.charCodeAt(i + 2) & 0xff) << 16
// @ts-ignore
case 2:
h ^= (str.charCodeAt(i + 1) & 0xff) << 8
case 1:
h ^= str.charCodeAt(i) & 0xff
h =
(h & 0xffff) * 0x5bd1e995 +
((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16)
}
h ^= h >>> 13
h = (h & 0xffff) * 0x5bd1e995 + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16)
h ^= h >>> 15
return h >>> 0
}