iobuffer.h 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  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 /* wchar_t */
  24. #define IOBUF_T_7BIT 7
  25. #ifdef _WIN32
  26. #define IOBUF_T_PARAM IOBUF_T_I4
  27. #else
  28. #if defined(__x86_64__)
  29. #define IOBUF_T_PARAM IOBUF_T_I8
  30. #elif defined(__i386__)
  31. #define IOBUF_T_PARAM IOBUF_T_I4
  32. #else
  33. #define IOBUF_T_PARAM IOBUF_T_I4
  34. #endif
  35. #endif //_WIN32
  36. #define IOBUF_T_PTR IOBUF_T_PARAM
  37. typedef struct iobuffer_t iobuffer_t;
  38. TOOLKIT_API iobuffer_t *iobuffer_create(int head_capacity, int capacity);
  39. TOOLKIT_API void iobuffer_destroy(iobuffer_t *iobuf);
  40. TOOLKIT_API iobuffer_t *iobuffer_clone(iobuffer_t *iobuf);
  41. TOOLKIT_API void iobuffer_reset(iobuffer_t *iobuf);
  42. TOOLKIT_API int iobuffer_get_capacity(iobuffer_t *iobuf);
  43. TOOLKIT_API void iobuffer_set_capacity(iobuffer_t *iobuf, int capacity);
  44. TOOLKIT_API char *iobuffer_data(iobuffer_t *iobuf, int offset);
  45. TOOLKIT_API int iobuffer_get_length(iobuffer_t *iobuf);
  46. TOOLKIT_API void iobuffer_set_length(iobuffer_t *iobuf, int length);
  47. TOOLKIT_API void iobuffer_push_count(iobuffer_t *iobuf, int n);
  48. TOOLKIT_API void iobuffer_pop_count(iobuffer_t *iobuf, int n);
  49. TOOLKIT_API void iobuffer_write(iobuffer_t *iobuf, int t, const void *v, int n);
  50. TOOLKIT_API void iobuffer_write_head(iobuffer_t *iobuf, int t, const void *v, int n);
  51. TOOLKIT_API void iobuffer_read(iobuffer_t *iobuf, int t, void *v, int *n);
  52. TOOLKIT_API int iobuffer_get_read_state(iobuffer_t *iobuf);
  53. TOOLKIT_API void iobuffer_restore_read_state(iobuffer_t *iobuf, int state);
  54. TOOLKIT_API int iobuffer_get_write_state(iobuffer_t *iobuf);
  55. TOOLKIT_API void iobuffer_restore_write_state(iobuffer_t *iobuf, int state);
  56. TOOLKIT_API void iobuffer_set_user_data(iobuffer_t *iobuf, void *user_data);
  57. TOOLKIT_API void *iobuffer_get_user_data(iobuffer_t *iobuf);
  58. TOOLKIT_API int iobuffer_inc_ref(iobuffer_t *iobuf);
  59. TOOLKIT_API int iobuffer_dec_ref(iobuffer_t *iobuf);
  60. TOOLKIT_API int iobuffer_cnt_ref(iobuffer_t *iobuf);
  61. // fmt = "8421sb"
  62. TOOLKIT_API void iobuffer_format_readv(iobuffer_t *iobuf, const char *fmt, va_list arg);
  63. TOOLKIT_API void iobuffer_format_writev(iobuffer_t *iobuf, const char *fmt, va_list arg);
  64. TOOLKIT_API void iobuffer_format_read(iobuffer_t *iobuf, const char *fmt, ...);
  65. TOOLKIT_API void iobuffer_format_write(iobuffer_t *iobuf, const char *fmt, ...);
  66. TOOLKIT_API void iobuffer_format_writev_head(iobuffer_t *iobuf, const char *fmt, va_list arg);
  67. TOOLKIT_API void iobuffer_format_write_head(iobuffer_t *iobuf, const char *fmt, ...);
  68. typedef struct iobuffer_queue_t iobuffer_queue_t;
  69. TOOLKIT_API iobuffer_queue_t *iobuffer_queue_create();
  70. TOOLKIT_API void iobuffer_queue_destroy(iobuffer_queue_t *queue);
  71. TOOLKIT_API iobuffer_t *iobuffer_queue_deque(iobuffer_queue_t *queue);
  72. TOOLKIT_API void iobuffer_queue_enqueue(iobuffer_queue_t *queue, iobuffer_t *iobuf);
  73. TOOLKIT_API int iobuffer_queue_count(iobuffer_queue_t *queue);
  74. TOOLKIT_API iobuffer_t *iobuffer_queue_head(iobuffer_queue_t *queue);
  75. TOOLKIT_API iobuffer_t *iobuffer_queue_tail(iobuffer_queue_t *queue);
  76. #ifdef __cplusplus
  77. } // extern "C" {
  78. #endif
  79. #endif // IOBUFFER_H