#include "utils/snowflake.h" #include namespace utils { static struct EpochInitializer { EpochInitializer() { EPOCH = std::chrono::system_clock::now(); } std::chrono::system_clock::time_point EPOCH; } epochInitializer; Snowflake GenerateID() { static std::mutex snowflakeGenerateMutex_; std::lock_guard lock(snowflakeGenerateMutex_); std::size_t tid = std::hash{}(std::this_thread::get_id()); 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; } }; // namespace Chattr