iobuffer.h 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. /*
  2. * category: [data structure, core]
  3. * apply status:
  4. * edit status:
  5. * build status:
  6. * description:
  7. */
  8. #ifndef IOBUFFER_H
  9. #define IOBUFFER_H
  10. #pragma once
  11. #include "config.h"
  12. #ifdef __cplusplus
  13. extern "C" {
  14. #endif
  15. /** compliance with .net framework's BinaryWriter BinaryReader */
  16. #include <stdarg.h>
  17. #define IOBUF_T_I8 0
  18. #define IOBUF_T_I4 1
  19. #define IOBUF_T_I2 2
  20. #define IOBUF_T_I1 3
  21. #define IOBUF_T_STR 4
  22. #define IOBUF_T_BUF 5
  23. #define IOBUF_T_WSTR 6 /* uint16_t */
  24. #define IOBUF_T_7BIT 7
  25. #define IOBUF_T_WCSTR 8 /* wchar_t */
  26. #if defined(_MSC_VER)
  27. #define IOBUF_T_WTSTR IOBUF_T_WSTR
  28. #else
  29. #define IOBUF_T_WTSTR IOBUF_T_WCSTR
  30. #endif //_MSC_VER
  31. #ifdef _WIN32
  32. #define IOBUF_T_PARAM IOBUF_T_I4
  33. #else
  34. #if (defined(__x86_64__) || defined(__aarch64__))
  35. #define IOBUF_T_PARAM IOBUF_T_I8
  36. #elif defined(__i386__)
  37. #define IOBUF_T_PARAM IOBUF_T_I4
  38. #else
  39. #define IOBUF_T_PARAM IOBUF_T_I4
  40. #endif
  41. #endif //_WIN32
  42. #define IOBUF_T_PTR IOBUF_T_PARAM
  43. #if defined(_MSC_VER)
  44. #define IOBUF_WSTR_FLAG "w"
  45. #else
  46. #define IOBUF_WSTR_FLAG "m"
  47. #endif //_MSC_VER
  48. typedef struct iobuffer_t iobuffer_t;
  49. #ifndef DEBUD_MEM_TRACE
  50. TOOLKIT_API iobuffer_t* iobuffer_create(int head_capacity, int capacity);
  51. TOOLKIT_API iobuffer_t* iobuffer_clone(iobuffer_t* iobuf);
  52. #else
  53. TOOLKIT_API iobuffer_t* iobuffer_create_trace(int head_capacity, int capacity, const char* file, const char* function, int line);
  54. #define iobuffer_create(h,c) iobuffer_create_trace(h, c, MEM_TRACE_LOCATION)
  55. TOOLKIT_API iobuffer_t* iobuffer_clone_trace(iobuffer_t* iobuf, const char* file, const char* function, int line);
  56. #define iobuffer_clone(buf) iobuffer_clone_trace(buf, MEM_TRACE_LOCATION)
  57. #endif
  58. TOOLKIT_API void iobuffer_destroy(iobuffer_t *iobuf);
  59. TOOLKIT_API void iobuffer_reset(iobuffer_t *iobuf);
  60. TOOLKIT_API int iobuffer_get_capacity(iobuffer_t *iobuf);
  61. TOOLKIT_API void iobuffer_set_capacity(iobuffer_t *iobuf, int capacity);
  62. TOOLKIT_API char *iobuffer_data(iobuffer_t *iobuf, int offset);
  63. TOOLKIT_API int iobuffer_get_length(iobuffer_t *iobuf);
  64. TOOLKIT_API void iobuffer_set_length(iobuffer_t *iobuf, int length);
  65. TOOLKIT_API void iobuffer_push_count(iobuffer_t *iobuf, int n);
  66. TOOLKIT_API void iobuffer_pop_count(iobuffer_t *iobuf, int n);
  67. TOOLKIT_API void iobuffer_write(iobuffer_t *iobuf, int t, const void *v, int n);
  68. TOOLKIT_API void iobuffer_write_head(iobuffer_t *iobuf, int t, const void *v, int n);
  69. TOOLKIT_API void iobuffer_read(iobuffer_t *iobuf, int t, void *v, int *n);
  70. TOOLKIT_API int iobuffer_get_read_state(iobuffer_t *iobuf);
  71. TOOLKIT_API void iobuffer_restore_read_state(iobuffer_t *iobuf, int state);
  72. TOOLKIT_API int iobuffer_get_write_state(iobuffer_t *iobuf);
  73. TOOLKIT_API void iobuffer_restore_write_state(iobuffer_t *iobuf, int state);
  74. TOOLKIT_API void iobuffer_set_user_data(iobuffer_t *iobuf, void *user_data);
  75. TOOLKIT_API void *iobuffer_get_user_data(iobuffer_t *iobuf);
  76. TOOLKIT_API int iobuffer_inc_ref(iobuffer_t *iobuf);
  77. TOOLKIT_API int iobuffer_dec_ref(iobuffer_t *iobuf);
  78. TOOLKIT_API int iobuffer_cnt_ref(iobuffer_t *iobuf);
  79. #define LINKINFO_BUSSID_LEN 32
  80. #define LINKINFO_TRACEID_LEN 32
  81. #define LINKINFO_SPANID_LEN 16
  82. #define LINKINFO_PARENTSPANID_LEN 16
  83. TOOLKIT_API int iobuffer_get_linkId(iobuffer_t* iobuf);
  84. TOOLKIT_API void iobuffer_set_linkId(iobuffer_t* iobuf, int linkId);
  85. TOOLKIT_API void iobuffer_get_linkInfo(iobuffer_t* iobuf, char *t_bussId, char *t_tranceId, char *t_spanId, char *t_parentSpanId);
  86. TOOLKIT_API void iobuffer_set_linkInfo(iobuffer_t* iobuf, const char* t_bussId, const char* t_tranceId, const char* t_spanId, const char* t_parentSpanId);
  87. TOOLKIT_API void iobuffer_copy_linkInfo(iobuffer_t* dst, iobuffer_t* src);
  88. // fmt = "8421sb"
  89. TOOLKIT_API void iobuffer_format_readv(iobuffer_t *iobuf, const char *fmt, va_list arg);
  90. TOOLKIT_API void iobuffer_format_writev(iobuffer_t *iobuf, const char *fmt, va_list arg);
  91. TOOLKIT_API void iobuffer_format_read(iobuffer_t *iobuf, const char *fmt, ...);
  92. TOOLKIT_API void iobuffer_format_write(iobuffer_t *iobuf, const char *fmt, ...);
  93. TOOLKIT_API void iobuffer_format_writev_head(iobuffer_t *iobuf, const char *fmt, va_list arg);
  94. TOOLKIT_API void iobuffer_format_write_head(iobuffer_t *iobuf, const char *fmt, ...);
  95. typedef struct iobuffer_queue_t iobuffer_queue_t;
  96. TOOLKIT_API iobuffer_queue_t *iobuffer_queue_create();
  97. TOOLKIT_API void iobuffer_queue_destroy(iobuffer_queue_t *queue);
  98. TOOLKIT_API iobuffer_t *iobuffer_queue_deque(iobuffer_queue_t *queue);
  99. TOOLKIT_API void iobuffer_queue_enqueue(iobuffer_queue_t *queue, iobuffer_t *iobuf);
  100. TOOLKIT_API int iobuffer_queue_count(iobuffer_queue_t *queue);
  101. TOOLKIT_API iobuffer_t *iobuffer_queue_head(iobuffer_queue_t *queue);
  102. TOOLKIT_API iobuffer_t *iobuffer_queue_tail(iobuffer_queue_t *queue);
  103. #ifdef __cplusplus
  104. } // extern "C" {
  105. #endif
  106. #endif // IOBUFFER_H