10 constexpr uint64_t
mortonCode(uint16_t i, uint16_t j, uint16_t k)
16 I = (I << 16 | I) & 0x0000ff0000ff;
17 J = (J << 16 | J) & 0x0000ff0000ff;
18 K = (K << 16 | K) & 0x0000ff0000ff;
19 I = (I << 8 | I) & 0x00f00f00f00f;
20 J = (J << 8 | J) & 0x00f00f00f00f;
21 K = (K << 8 | K) & 0x00f00f00f00f;
22 I = (I << 4 | I) & 0x0c30c30c30c3;
23 J = (J << 4 | J) & 0x0c30c30c30c3;
24 K = (K << 4 | K) & 0x0c30c30c30c3;
25 I = (I << 2 | I) & 0x024249249249;
26 J = (J << 2 | J) & 0x024249249249;
27 K = (K << 2 | K) & 0x024249249249;
28 return K << 2 | J << 1 | I;
34 uint64_t res = a | (uint64_t(b) << 32);
35 res = (res | (res << 8)) & 0x00ff00ff00ff00ff;
36 res = (res | (res << 4)) & 0x0f0f0f0f0f0f0f0f;
37 res = (res | (res << 2)) & 0x3333333333333333;
38 res = (res | (res << 1)) & 0x5555555555555555;
39 return uint32_t(res | (res >> 31));
Contains all Cogs related functionality.
constexpr uint64_t mortonCode(uint16_t i, uint16_t j, uint16_t k)
Interleave bits of 3 values to form the 3-way Morton code.