sp_uid.h 1019 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #ifndef SP_UID_H
  2. #define SP_UID_H
  3. #pragma once
  4. #ifdef __cplusplus
  5. extern "C" {
  6. #endif
  7. #include "y2k_time.h"
  8. typedef u__int64_t sp_uid_t;
  9. typedef struct sp_uid_generator_t sp_uid_generator_t;
  10. // uid_t is conflict with defined type in sys/types.h [3/19/2020 12:10 Gifur]
  11. struct _sp_uid_t {
  12. union {
  13. u__int64_t id;
  14. struct {
  15. unsigned short app_id;
  16. unsigned short dsn;
  17. unsigned int tick;
  18. };
  19. };
  20. };
  21. sp_uid_generator_t *sp_uid_generator_create(unsigned short app_id, int mt);
  22. void sp_uid_generator_destroy(sp_uid_generator_t *uid);
  23. sp_uid_t sp_uid_generator_new_id(sp_uid_generator_t *uid);
  24. sp_uid_t sp_uid_make(unsigned short app_id);
  25. sp_uid_t sp_uid_update(sp_uid_t t);
  26. static __inline unsigned int sp_uid_get_tick_part(sp_uid_t t)
  27. {
  28. struct _sp_uid_t r;
  29. r.id = t;
  30. return r.tick;
  31. }
  32. static __inline sp_uid_t sp_uid_change_app_id(sp_uid_t t, unsigned short app_id)
  33. {
  34. struct _sp_uid_t r;
  35. r.id = t;
  36. r.app_id = app_id;
  37. return r.id;
  38. }
  39. #ifdef __cplusplus
  40. } // extern "C" {
  41. #endif
  42. #endif // SP_UID_H