1
0
mirror of synced 2025-11-06 03:20:55 +08:00
Files
SnowFlake-IdGenerator/C/source/idgen/SnowWorkerM1.h
2021-04-05 21:21:39 +08:00

54 lines
1.2 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* 版权属于yitter(yitter@126.com)
* 代码翻译amuluowin
* 代码修订yitter
* 开源地址https://gitee.com/yitter/idgenerator
*/
#pragma once
#include <stdlib.h>
#include <stdint.h>
#include <sys/timeb.h>
#include <pthread.h>
#include <stdbool.h>
#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();