/* * 版权属于:yitter(yitter@126.com) * 代码翻译:amuluowin * 代码修订:yitter * 开源地址:https://gitee.com/yitter/idgenerator */ #pragma once #include #include #include #include #include #include "IdGenOptions.h" extern pthread_mutex_t ThreadMutex; typedef struct SnowFlakeWorker { uint8_t Method; uint64_t BaseTime; uint32_t WorkerId; uint8_t WorkerIdBitLength; uint8_t SeqBitLength; uint32_t MaxSeqNumber; uint32_t MinSeqNumber; uint32_t TopOverCostCount; uint8_t _TimestampShift; uint32_t _CurrentSeqNumber; int64_t _LastTimeTick; int64_t _TurnBackTimeTick; uint8_t _TurnBackIndex; bool _IsOverCost; uint32_t _OverCostCountInOneTerm; uint32_t _GenCountInOneTerm; uint32_t _TermIndex; } SnowFlakeWorker; extern SnowFlakeWorker *NewSnowFlakeWorker(); extern int64_t WorkerM1NextId(SnowFlakeWorker *worker); extern int64_t GetCurrentTimeTick(SnowFlakeWorker *worker); extern int64_t GetNextTimeTick(SnowFlakeWorker *worker); extern int64_t GetCurrentTime(); extern int64_t GetCurrentMicroTime();