#ifndef SP_UID_H #define SP_UID_H #pragma once #ifdef __cplusplus extern "C" { #endif #include "y2k_time.h" typedef u__int64_t sp_uid_t; typedef struct sp_uid_generator_t sp_uid_generator_t; // uid_t is conflict with defined type in sys/types.h [3/19/2020 12:10 Gifur] struct _sp_uid_t { union { u__int64_t id; struct { unsigned short app_id; unsigned short dsn; unsigned int tick; }; }; }; sp_uid_generator_t *sp_uid_generator_create(unsigned short app_id, int mt); void sp_uid_generator_destroy(sp_uid_generator_t *uid); sp_uid_t sp_uid_generator_new_id(sp_uid_generator_t *uid); sp_uid_t sp_uid_make(unsigned short app_id); sp_uid_t sp_uid_update(sp_uid_t t); static __inline unsigned int sp_uid_get_tick_part(sp_uid_t t) { struct _sp_uid_t r; r.id = t; return r.tick; } static __inline sp_uid_t sp_uid_change_app_id(sp_uid_t t, unsigned short app_id) { struct _sp_uid_t r; r.id = t; r.app_id = app_id; return r.id; } #ifdef __cplusplus } // extern "C" { #endif #endif // SP_UID_H