| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- /*
- * 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 /* wchar_t */
- #define IOBUF_T_7BIT 7
- #ifdef _WIN32
- #define IOBUF_T_PARAM IOBUF_T_I4
- #else
- #if defined(__x86_64__)
- #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
- typedef struct iobuffer_t iobuffer_t;
- TOOLKIT_API iobuffer_t *iobuffer_create(int head_capacity, int capacity);
- TOOLKIT_API void iobuffer_destroy(iobuffer_t *iobuf);
- TOOLKIT_API iobuffer_t *iobuffer_clone(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);
- // 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
|