You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

SnowWorkerM1.h 1.2 kB

4 years ago
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. /*
  2. * 版权属于:yitter(yitter@126.com)
  3. * 代码翻译:amuluowin
  4. * 代码修订:yitter
  5. * 开源地址:https://gitee.com/yitter/idgenerator
  6. */
  7. #pragma once
  8. #include <stdlib.h>
  9. #include <stdint.h>
  10. #include <sys/timeb.h>
  11. #include <pthread.h>
  12. #include <stdbool.h>
  13. #include "IdGenOptions.h"
  14. extern pthread_mutex_t ThreadMutex;
  15. typedef struct SnowFlakeWorker {
  16. uint8_t Method;
  17. uint64_t BaseTime;
  18. uint32_t WorkerId;
  19. uint8_t WorkerIdBitLength;
  20. uint8_t SeqBitLength;
  21. uint32_t MaxSeqNumber;
  22. uint32_t MinSeqNumber;
  23. uint32_t TopOverCostCount;
  24. uint8_t _TimestampShift;
  25. uint32_t _CurrentSeqNumber;
  26. int64_t _LastTimeTick;
  27. int64_t _TurnBackTimeTick;
  28. uint8_t _TurnBackIndex;
  29. bool _IsOverCost;
  30. uint32_t _OverCostCountInOneTerm;
  31. uint32_t _GenCountInOneTerm;
  32. uint32_t _TermIndex;
  33. } SnowFlakeWorker;
  34. extern SnowFlakeWorker *NewSnowFlakeWorker();
  35. extern uint64_t WorkerM1NextId(SnowFlakeWorker *worker);
  36. extern uint64_t GetCurrentTimeTick(SnowFlakeWorker *worker);
  37. extern uint64_t GetNextTimeTick(SnowFlakeWorker *worker);
  38. extern uint64_t GetCurrentTime();
  39. extern uint64_t GetCurrentMicroTime();

雪花算法中非常好用的数字ID生成器