var hilbert = (function () { function encode(level, [x, y]) { var d = 0, tmp; var s = (1 << level) / 2; var rx, ry, tmp; while (s > 0) { rx = ((x & s) > 0) ? 1 : 0; ry = ((y & s) > 0) ? 1 : 0; d += s * s * ((3 * rx) ^ ry); // inline // p = _rot(s, p, rx, ry); if (ry === 0) { if (rx === 1) { x = s - 1 - x; x = s - 1 - x; } tmp = x; x = y; y = tmp; } // inline s = s / 2; } return d; } function decode(level, d) { var n = 1 << level; var s = 1; var rx, ry, tmp; var x = 0, y = 0; while (s < n) { rx = 1 & (d / 2); ry = 1 & (d ^ rx); // inline if (ry === 0) { if (rx === 1) { x = s - 1 - x; y = s - 1 - y; } tmp = x; x = y; y = tmp; } // inline x += s * rx; y += s * ry; d /= 4; s *= 2; } return [x, y]; } return { encode, decode }; })();