26#ifndef ROUTER_SRC_MYSQL_REST_SERVICE_INCLUDE_HELPER_GENERATE_UUID_H_
27#define ROUTER_SRC_MYSQL_REST_SERVICE_INCLUDE_HELPER_GENERATE_UUID_H_
35using UUID = std::array<uint8_t, 16>;
39 std::random_device rd;
40 std::mt19937 gen(rd());
41 std::uniform_int_distribution<uint32_t> dis(0, 0xFFFFFFFF);
43 uint32_t *parts32 =
reinterpret_cast<uint32_t *
>(
result.data());
44 uint16_t *parts16 =
reinterpret_cast<uint16_t *
>(
result.data());
46 parts32[0] = dis(gen);
48 parts16[0 + 4] = dis(gen);
49 parts16[1 + 4] = (dis(gen) & 0x0FFF) | 0x4000;
51 parts16[2 + 4] = (dis(gen) & 0x3FFF) | 0x8000;
52 parts16[3 + 4] = dis(gen);
54 parts32[3] = dis(gen);
60 const uint32_t *parts32 =
reinterpret_cast<const uint32_t *
>(uuid.data());
61 const uint16_t *parts16 =
reinterpret_cast<const uint16_t *
>(uuid.data());
63 oss <<
std::hex << std::setfill(
'0') << std::setw(8) << parts32[0];
65 oss << std::setw(4) << parts16[4] <<
"-" << std::setw(4) << parts16[5] <<
"-"
66 << std::setw(4) << parts16[6] <<
"-";
67 oss << std::setw(4) << parts16[7] << std::setw(8) << parts32[3];
std::string hex(const Container &c)
Definition: hex.h:61
std::array< uint8_t, 16 > UUID
Definition: generate_uuid.h:35
std::string to_uuid_string(const UUID &uuid)
Definition: generate_uuid.h:59
UUID generate_uuid_v4()
Definition: generate_uuid.h:37
std::basic_ostringstream< char, std::char_traits< char >, ut::allocator< char > > ostringstream
Specialization of basic_ostringstream which uses ut::allocator.
Definition: ut0new.h:2872
struct result result
Definition: result.h:34