uhf_buffer.c 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #include "uhf_buffer.h"
  2. #include <stdlib.h>
  3. #include <string.h>
  4. Buffer* uhf_buffer_alloc(size_t initial_capacity) {
  5. Buffer* buf = (Buffer*)malloc(sizeof(Buffer));
  6. buf->data = (uint8_t*)malloc(sizeof(uint8_t) * initial_capacity);
  7. if(!buf->data) {
  8. free(buf);
  9. return NULL;
  10. }
  11. buf->size = 0;
  12. buf->capacity = initial_capacity;
  13. buf->head = 0;
  14. buf->tail = 0;
  15. return buf;
  16. }
  17. bool uhf_buffer_append_single(Buffer* buf, uint8_t data) {
  18. if(buf->closed) return false;
  19. buf->data[buf->tail] = data;
  20. buf->tail = (buf->tail + 1) % buf->capacity;
  21. if(buf->size < buf->capacity) {
  22. buf->size++;
  23. } else {
  24. buf->head = (buf->head + 1) % buf->capacity;
  25. }
  26. return true;
  27. }
  28. bool uhf_buffer_append(Buffer* buf, uint8_t* data, size_t data_size) {
  29. if(buf->closed) return false;
  30. for(size_t i = 0; i < data_size; i++) {
  31. buf->data[buf->tail] = data[i];
  32. buf->tail = (buf->tail + 1) % buf->capacity;
  33. if(buf->size < buf->capacity) {
  34. buf->size++;
  35. } else {
  36. buf->head = (buf->head + 1) % buf->capacity;
  37. }
  38. }
  39. return true;
  40. }
  41. uint8_t* uhf_buffer_get_data(Buffer* buf) {
  42. return &buf->data[buf->head];
  43. }
  44. size_t uhf_buffer_get_size(Buffer* buf) {
  45. return buf->size;
  46. }
  47. bool uhf_is_buffer_closed(Buffer* buf) {
  48. return buf->closed;
  49. }
  50. void uhf_buffer_close(Buffer* buf) {
  51. buf->closed = true;
  52. }
  53. void uhf_buffer_reset(Buffer* buf) {
  54. buf->head = 0;
  55. buf->tail = 0;
  56. buf->size = 0;
  57. buf->closed = false;
  58. }
  59. void uhf_buffer_free(Buffer* buf) {
  60. free(buf->data);
  61. free(buf);
  62. }