Mercurial > wow > cyborg-mmo7
comparison support/casc/jenkins96.lua @ 65:8b8b0bade520
Fixed support for mounts using the new MountJournal and mount IDs (no conversion of old profiles at the moment).
author | Jerome Vuarand <jerome.vuarand@gmail.com> |
---|---|
date | Thu, 23 Oct 2014 13:44:59 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
64:49ae7191821f | 65:8b8b0bade520 |
---|---|
1 local M, plat, bin = {}, require("casc.platform"), require("casc.bin") | |
2 | |
3 local rot, xor, uint32_le, to_le32 = plat.rol, plat.bxor, bin.uint32_le, bin.to_le32 | |
4 | |
5 function M.hash(k) | |
6 assert(type(k) == "string", 'Syntax: casc.jenkins96.hash("key")') | |
7 | |
8 if #k == 0 then return 0xdeadbeef, 0xdeadbeef end | |
9 local a = 0xdeadbeef + #k | |
10 local b, c, k = a, a, k .. (k ~= "" and ("\0"):rep((12 - #k % 12) % 12) or "") | |
11 for i=0, #k-13, 12 do | |
12 a, b, c = a + uint32_le(k, i), b + uint32_le(k, i+4), c + uint32_le(k, i+8) | |
13 a = xor(a-c, rot(c, 4)); c = c + b | |
14 b = xor(b-a, rot(a, 6)); a = a + c | |
15 c = xor(c-b, rot(b, 8)); b = b + a | |
16 a = xor(a-c, rot(c,16)); c = c + b | |
17 b = xor(b-a, rot(a,19)); a = a + c | |
18 c = xor(c-b, rot(b, 4)); b = b + a | |
19 end | |
20 local i = #k - 12 | |
21 a, b, c = a + uint32_le(k, i), b + uint32_le(k, i+4), c + uint32_le(k, i+8) | |
22 c = xor(c, b) - rot(b,14) | |
23 a = xor(a, c) - rot(c,11) | |
24 b = xor(b, a) - rot(a,25) | |
25 c = xor(c, b) - rot(b,16) | |
26 a = xor(a, c) - rot(c,04) | |
27 b = xor(b, a) - rot(a,14) | |
28 c = xor(c, b) - rot(b,24) | |
29 return c, b | |
30 end | |
31 | |
32 function M.hash_path(path) | |
33 assert(type(path) == "string", 'Syntax: casc.jenkins96.hash_path("path")') | |
34 local c, b = M.hash((path:upper():gsub('/', '\\'))) | |
35 return to_le32(b) .. to_le32(c) | |
36 end | |
37 | |
38 return M |