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