DynString.h 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #ifndef DYN_STRING_H_
  2. #define DYN_STRING_H_
  3. #include <stdbool.h>
  4. #include <stddef.h>
  5. #include "scufcont.h"
  6. #define DYN_STRING_FMT(dstr) (int) (dstr).len, (dstr).data
  7. #define DynString_is_null(dstr) ((dstr)->data == NULL)
  8. #define DynString_c_str(dstr) ((dstr)->data)
  9. typedef struct {
  10. char* data;
  11. size_t len;
  12. size_t capacity;
  13. } DynString;
  14. ScufContResult DynString_alloc(DynString* dstr, const char* str, const size_t len);
  15. ScufContResult DynString_reserve(DynString* dstr, const size_t new_capacity);
  16. void DynString_free(DynString* dstr);
  17. bool DynString_equal(const DynString* s1, const DynString* s2);
  18. bool DynString_equal_c_str(const DynString* s1, const char* s2);
  19. bool DynString_equal_next_chars_c_str(
  20. const DynString* dstr,
  21. const char* str,
  22. const size_t str_len,
  23. const size_t s
  24. );
  25. ScufContResult DynString_concat_c_str(
  26. DynString* dstr,
  27. const char* str,
  28. const size_t str_len
  29. );
  30. ScufContResult DynString_alloc_concat_c_strs(
  31. DynString* dstr,
  32. const char* s1,
  33. const size_t s1_len,
  34. const char* s2,
  35. const size_t s2_len
  36. );
  37. ScufContResult DynString_split(
  38. const DynString* dstr,
  39. const char* delim,
  40. DynString** split_arr,
  41. size_t* arr_len
  42. );
  43. void DynString_split_arr_free(DynString** arr, const size_t arr_len);
  44. #endif // DYN_STRING_H_