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