uhf_buffer.c 1.5 KB

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