#include "Utils/Snowflake.hpp" namespace Chattr { Snowflake GenerateID() { static struct EpochInitializer { EpochInitializer() { EPOCH = std::chrono::system_clock::now(); } std::chrono::system_clock::time_point EPOCH; } epochInitializer; static std::mutex snowflakeGenerateMutex_; std::lock_guard lock(snowflakeGenerateMutex_); std::size_t tid; #ifdef _WIN32 tid = static_cast(GetCurrentThreadId()); #elif __linux__ tid = static_cast(pthread_self()); #endif thread_local static int sequence = 0; Snowflake id = {}; auto timestamp = std::chrono::duration_cast(std::chrono::system_clock::now() - epochInitializer.EPOCH); id.timestamp = timestamp.count(); id.instance = tid; id.sequence = sequence++; return id; } };