- fix UUID generation on Android

This commit is contained in:
Dmytro Bogovych 2024-11-01 19:19:41 +03:00
parent 2c2167c840
commit caf1283f0a
1 changed files with 14 additions and 1 deletions

View File

@ -3,7 +3,10 @@
#include <random> #include <random>
#include <span> #include <span>
#if defined(TARGET_LINUX)
#define UUID_SYSTEM_GENERATOR #define UUID_SYSTEM_GENERATOR
#endif
#include "uuid.h" #include "uuid.h"
Uuid::Uuid() Uuid::Uuid()
@ -14,8 +17,18 @@ Uuid::Uuid()
Uuid Uuid::generateOne() Uuid Uuid::generateOne()
{ {
Uuid result; Uuid result;
#if defined(TARGET_LINUX)
auto id = uuids::uuid_system_generator{}(); auto id = uuids::uuid_system_generator{}();
#else
std::random_device rd;
auto seed_data = std::array<int, std::mt19937::state_size> {};
std::generate(std::begin(seed_data), std::end(seed_data), std::ref(rd));
std::seed_seq seq(std::begin(seed_data), std::end(seed_data));
std::mt19937 generator(seq);
uuids::uuid_random_generator gen{generator};
auto id = gen();
#endif
memcpy(result.mUuid, id.as_bytes().data(), id.as_bytes().size_bytes()); memcpy(result.mUuid, id.as_bytes().data(), id.as_bytes().size_bytes());
return result; return result;
} }