22 template <
typename UIntType>
23 inline UIntType splitmix(UIntType&);
26 inline uint32_t splitmix<uint32_t>(uint32_t& x) {
27 uint32_t z = (x += 0x6D2B79F5UL);
28 z = (z ^ (z >> 15)) * (z | 1UL);
29 z ^= z + (z ^ (z >> 7)) * (z | 61UL);
34 inline uint64_t splitmix<uint64_t>(uint64_t& x) {
35 uint64_t z = (x += 0x9e3779b97f4a7c15);
36 z = (z ^ (z >> 30)) * 0xbf58476d1ce4e5b9;
37 z = (z ^ (z >> 27)) * 0x94d049bb133111eb;