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));
Main Cogs namespace.
Definition: MortonCode.h:5
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.
Definition: MortonCode.h:10