uhf_buffer.c 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #include "uhf_buffer.h"
  2. #include <stdlib.h>
  3. #include <string.h>
  4. Buffer* buffer_alloc(size_t initial_capacity) {
  5. Buffer* buf = (Buffer*)malloc(sizeof(Buffer));
  6. if(!buf) return NULL;
  7. buf->data = (uint8_t*)malloc(initial_capacity);
  8. if(!buf->data) {
  9. free(buf);
  10. return NULL;
  11. }
  12. buf->size = 0;
  13. buf->capacity = initial_capacity;
  14. return buf;
  15. }
  16. bool buffer_append_single(Buffer* buf, uint8_t data) {
  17. if(buf->closed) return false;
  18. if(buf->size + 1 > buf->capacity) {
  19. size_t new_capacity = buf->capacity * 2;
  20. uint8_t* new_data = (uint8_t*)realloc(buf->data, new_capacity);
  21. if(!new_data) return false;
  22. buf->data = new_data;
  23. buf->capacity = new_capacity;
  24. }
  25. buf->data[buf->size++] = data;
  26. return true;
  27. }
  28. bool buffer_append(Buffer* buf, uint8_t* data, size_t data_size) {
  29. if(buf->closed) return false;
  30. if(buf->size + data_size > buf->capacity) {
  31. size_t new_capacity = buf->capacity * 2;
  32. uint8_t* new_data = (uint8_t*)realloc(buf->data, new_capacity);
  33. if(!new_data) return false;
  34. buf->data = new_data;
  35. buf->capacity = new_capacity;
  36. }
  37. memcpy((void*)&buf->data[buf->size], data, data_size);
  38. buf->size += data_size;
  39. return true;
  40. }
  41. uint8_t* buffer_get_data(Buffer* buf) {
  42. return buf->data;
  43. }
  44. size_t buffer_get_size(Buffer* buf) {
  45. return buf->size;
  46. }
  47. void buffer_close(Buffer* buf) {
  48. buf->closed = true;
  49. }
  50. void buffer_reset(Buffer* buf) {
  51. buf->size = 0;
  52. buf->closed = false;
  53. }
  54. void buffer_free(Buffer* buf) {
  55. free(buf->data);
  56. free(buf);
  57. }