zf_buffer.h 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. /**
  2. *****************************************************************************
  3. * @file zf_buffer.h
  4. * @author Zorb
  5. * @version V1.0.0
  6. * @date 2018-06-28
  7. * @brief 环形缓冲器的头文件
  8. *****************************************************************************
  9. * @history
  10. *
  11. * 1. Date:2018-06-28
  12. * Author:Zorb
  13. * Modification:建立文件
  14. *
  15. *****************************************************************************
  16. */
  17. #ifndef __ZF_BUFFER_H__
  18. #define __ZF_BUFFER_H__
  19. #ifdef __cplusplus
  20. extern "C" {
  21. #endif
  22. #include "stdbool.h"
  23. #include "stdint.h"
  24. /* 环形缓冲区数据结构 */
  25. typedef struct _RingBuffer
  26. {
  27. bool IsExternBuffer; /* 是否外部缓冲区,是则销毁时不释放 */
  28. uint8_t *pBuf; /* 缓冲区指针 */
  29. uint32_t Head; /* 缓冲区头地址 */
  30. uint32_t Trail; /* 缓冲区尾地址 */
  31. uint32_t Size; /* 缓冲区大小 */
  32. uint32_t Count; /* 数据字节数 */
  33. /* 缓冲器是否已满 */
  34. bool (*IsFull)(struct _RingBuffer * const pRb);
  35. /* 缓冲器是否空 */
  36. bool (*IsEmpty)(struct _RingBuffer * const pRb);
  37. /* 压入一个字节 */
  38. bool (*SaveByte)(struct _RingBuffer * const pRb, uint8_t byte);
  39. /* 压入n个字节的数据 */
  40. uint32_t (*SaveRange)(struct _RingBuffer * const pRb, uint8_t *pArray,
  41. uint32_t n);
  42. /* 取出一个字节 */
  43. bool (*GetByte)(struct _RingBuffer * const pRb, uint8_t *pByte);
  44. /* 读取缓冲器已使用字节个数 */
  45. uint32_t (*GetCount)(struct _RingBuffer * const pRb);
  46. /* 读取n个字节(n超过最大数据数时全部读出) */
  47. uint32_t (*ReadBytes)(struct _RingBuffer * const pRb, uint8_t *pArray,
  48. uint32_t n);
  49. /* 丢弃n个字节(n超过最大数据数时全部丢弃) */
  50. uint32_t (*DropBytes)(struct _RingBuffer * const pRb, uint32_t n);
  51. /* 清空缓冲器 */
  52. bool (*Clear)(struct _RingBuffer * const pRb);
  53. /* 释放缓冲器(不释放外部创建的缓冲区) */
  54. bool (*Dispose)(struct _RingBuffer * const pRb);
  55. } RingBuffer;
  56. /* 创建缓冲器(内部分配空间,size=0表示使用外部数据) */
  57. bool RB_create(RingBuffer **ppRb, uint32_t size);
  58. /* 缓冲器是否已满 */
  59. bool RB_isFull(RingBuffer * const pRb);
  60. /* 缓冲器是否空 */
  61. bool RB_isEmpty(RingBuffer * const pRb);
  62. /* 压入一个字节 */
  63. bool RB_saveByte(RingBuffer * const pRb, uint8_t byte);
  64. /* 压入n个字节的数据 */
  65. uint32_t RB_saveRange(RingBuffer * const pRb, uint8_t *pArray, uint32_t n);
  66. /* 取出一个字节 */
  67. bool RB_getByte(RingBuffer * const pRb, uint8_t *pByte);
  68. /* 读取缓冲器已使用字节个数 */
  69. uint32_t RB_getCount(RingBuffer * const pRb);
  70. /* 读取n个字节(n超过最大数据数时全部读出) */
  71. uint32_t RB_readBytes(RingBuffer * const pRb, uint8_t *pArray, uint32_t n);
  72. /* 丢弃n个字节(n超过最大数据数时全部丢弃) */
  73. uint32_t RB_dropBytes(RingBuffer * const pRb, uint32_t n);
  74. /* 清空缓冲器 */
  75. bool RB_clear(RingBuffer * const pRb);
  76. /* 释放缓冲器(不释放外部创建的缓冲区) */
  77. bool RB_dispose(RingBuffer * const pRb);
  78. #ifdef __cplusplus
  79. }
  80. #endif
  81. #endif /* __ZF_BUFFER_H__ */
  82. /******************************** END OF FILE ********************************/