28static inline QUuid createUuidV7_internal(
29 std::chrono::time_point<std::chrono::system_clock, std::chrono::nanoseconds> tp)
33 using namespace std::chrono;
34 const nanoseconds nsecSinceEpoch = tp.time_since_epoch();
35 const auto msecSinceEpoch = floor<milliseconds>(nsecSinceEpoch);
36 const quint64 frac = (nsecSinceEpoch - msecSinceEpoch).count();
38 const quint64 msecs = quint64(msecSinceEpoch.count()) & 0xffffffffffff;
39 result.data1 = uint(msecs >> 16);
40 result.data2 = ushort(msecs);
47 result.data3 = frac >> 8;
48 result.data3 &= 0x0FFF;
49 result.data3 |= ushort(7) << 12;
52 const quint64 random = QRandomGenerator::system()->generate64();
53 memcpy(result.data4, &random,
sizeof(quint64));
54 result.data4[0] = (result.data4[0] & 0x3F) | 0x80;