123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- /*
- * category: [data structure, core]
- * apply status:
- * edit status:
- * build status:
- * description:
- */
- #ifndef IOBUFFER_H
- #define IOBUFFER_H
- #pragma once
- #include "config.h"
- #ifdef __cplusplus
- extern "C" {
- #endif
- /** compliance with .net framework's BinaryWriter BinaryReader */
- #include <stdarg.h>
- #define IOBUF_T_I8 0
- #define IOBUF_T_I4 1
- #define IOBUF_T_I2 2
- #define IOBUF_T_I1 3
- #define IOBUF_T_STR 4
- #define IOBUF_T_BUF 5
- #define IOBUF_T_WSTR 6 /* uint16_t */
- #define IOBUF_T_7BIT 7
- #define IOBUF_T_WCSTR 8 /* wchar_t */
- #if defined(_MSC_VER)
- #define IOBUF_T_WTSTR IOBUF_T_WSTR
- #else
- #define IOBUF_T_WTSTR IOBUF_T_WCSTR
- #endif //_MSC_VER
- #ifdef _WIN32
- #define IOBUF_T_PARAM IOBUF_T_I4
- #else
- #if (defined(__x86_64__) || defined(__aarch64__))
- #define IOBUF_T_PARAM IOBUF_T_I8
- #elif defined(__i386__)
- #define IOBUF_T_PARAM IOBUF_T_I4
- #else
- #define IOBUF_T_PARAM IOBUF_T_I4
- #endif
- #endif //_WIN32
- #define IOBUF_T_PTR IOBUF_T_PARAM
- #if defined(_MSC_VER)
- #define IOBUF_WSTR_FLAG "w"
- #else
- #define IOBUF_WSTR_FLAG "m"
- #endif //_MSC_VER
- typedef struct iobuffer_t iobuffer_t;
- #ifndef DEBUD_MEM_TRACE
- TOOLKIT_API iobuffer_t* iobuffer_create(int head_capacity, int capacity);
- TOOLKIT_API iobuffer_t* iobuffer_clone(iobuffer_t* iobuf);
- #else
- TOOLKIT_API iobuffer_t* iobuffer_create_trace(int head_capacity, int capacity, const char* file, const char* function, int line);
- #define iobuffer_create(h,c) iobuffer_create_trace(h, c, MEM_TRACE_LOCATION)
- TOOLKIT_API iobuffer_t* iobuffer_clone_trace(iobuffer_t* iobuf, const char* file, const char* function, int line);
- #define iobuffer_clone(buf) iobuffer_clone_trace(buf, MEM_TRACE_LOCATION)
- #endif
- TOOLKIT_API void iobuffer_destroy(iobuffer_t *iobuf);
- TOOLKIT_API void iobuffer_reset(iobuffer_t *iobuf);
- TOOLKIT_API int iobuffer_get_capacity(iobuffer_t *iobuf);
- TOOLKIT_API void iobuffer_set_capacity(iobuffer_t *iobuf, int capacity);
- TOOLKIT_API char *iobuffer_data(iobuffer_t *iobuf, int offset);
- TOOLKIT_API int iobuffer_get_length(iobuffer_t *iobuf);
- TOOLKIT_API void iobuffer_set_length(iobuffer_t *iobuf, int length);
- TOOLKIT_API void iobuffer_push_count(iobuffer_t *iobuf, int n);
- TOOLKIT_API void iobuffer_pop_count(iobuffer_t *iobuf, int n);
- TOOLKIT_API void iobuffer_write(iobuffer_t *iobuf, int t, const void *v, int n);
- TOOLKIT_API void iobuffer_write_head(iobuffer_t *iobuf, int t, const void *v, int n);
- TOOLKIT_API void iobuffer_read(iobuffer_t *iobuf, int t, void *v, int *n);
- TOOLKIT_API int iobuffer_get_read_state(iobuffer_t *iobuf);
- TOOLKIT_API void iobuffer_restore_read_state(iobuffer_t *iobuf, int state);
- TOOLKIT_API int iobuffer_get_write_state(iobuffer_t *iobuf);
- TOOLKIT_API void iobuffer_restore_write_state(iobuffer_t *iobuf, int state);
- TOOLKIT_API void iobuffer_set_user_data(iobuffer_t *iobuf, void *user_data);
- TOOLKIT_API void *iobuffer_get_user_data(iobuffer_t *iobuf);
- TOOLKIT_API int iobuffer_inc_ref(iobuffer_t *iobuf);
- TOOLKIT_API int iobuffer_dec_ref(iobuffer_t *iobuf);
- TOOLKIT_API int iobuffer_cnt_ref(iobuffer_t *iobuf);
- #define LINKINFO_BUSSID_LEN 32
- #define LINKINFO_TRACEID_LEN 32
- #define LINKINFO_SPANID_LEN 16
- #define LINKINFO_PARENTSPANID_LEN 16
- TOOLKIT_API int iobuffer_get_linkId(iobuffer_t* iobuf);
- TOOLKIT_API void iobuffer_set_linkId(iobuffer_t* iobuf, int linkId);
- TOOLKIT_API void iobuffer_get_linkInfo(iobuffer_t* iobuf, char *t_bussId, char *t_tranceId, char *t_spanId, char *t_parentSpanId);
- 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);
- TOOLKIT_API void iobuffer_copy_linkInfo(iobuffer_t* dst, iobuffer_t* src);
- // fmt = "8421sb"
- TOOLKIT_API void iobuffer_format_readv(iobuffer_t *iobuf, const char *fmt, va_list arg);
- TOOLKIT_API void iobuffer_format_writev(iobuffer_t *iobuf, const char *fmt, va_list arg);
- TOOLKIT_API void iobuffer_format_read(iobuffer_t *iobuf, const char *fmt, ...);
- TOOLKIT_API void iobuffer_format_write(iobuffer_t *iobuf, const char *fmt, ...);
- TOOLKIT_API void iobuffer_format_writev_head(iobuffer_t *iobuf, const char *fmt, va_list arg);
- TOOLKIT_API void iobuffer_format_write_head(iobuffer_t *iobuf, const char *fmt, ...);
- typedef struct iobuffer_queue_t iobuffer_queue_t;
- TOOLKIT_API iobuffer_queue_t *iobuffer_queue_create();
- TOOLKIT_API void iobuffer_queue_destroy(iobuffer_queue_t *queue);
- TOOLKIT_API iobuffer_t *iobuffer_queue_deque(iobuffer_queue_t *queue);
- TOOLKIT_API void iobuffer_queue_enqueue(iobuffer_queue_t *queue, iobuffer_t *iobuf);
- TOOLKIT_API int iobuffer_queue_count(iobuffer_queue_t *queue);
- TOOLKIT_API iobuffer_t *iobuffer_queue_head(iobuffer_queue_t *queue);
- TOOLKIT_API iobuffer_t *iobuffer_queue_tail(iobuffer_queue_t *queue);
- #ifdef __cplusplus
- } // extern "C" {
- #endif
- #endif // IOBUFFER_H
|