1
0

DString.h 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. #ifndef SCUFCONT_DSTRING_H_
  2. #define SCUFCONT_DSTRING_H_
  3. #include <stdbool.h>
  4. #include <stddef.h>
  5. #include "scufcont.h"
  6. #define SCDSTRING_FMT(dstr) (int) (dstr).len, (dstr).data
  7. #define SCDString_is_null(dstr) ((dstr)->data == NULL)
  8. #define SCDString_c_str(dstr) ((dstr)->data)
  9. typedef struct {
  10. char *data;
  11. size_t len;
  12. size_t capacity;
  13. } SCDString;
  14. /**
  15. @return SCUFCONT_OUT_OF_MEMORY
  16. @return SCUFCONT_SUCCESS
  17. */
  18. ScufContResult SCDString_alloc(SCDString *const dstr, const char *str, const size_t len);
  19. /**
  20. @param dstr Must not be allocated with any of the alloc functions. This functions allocates it.
  21. @return SCUFCONT_OUT_OF_MEMORY
  22. @return SCUFCONT_SUCCESS
  23. */
  24. ScufContResult SCDString_alloc_copy(SCDString *const dstr, const SCDString *const o);
  25. /**
  26. @return SCUFCONT_OUT_OF_MEMORY
  27. @return SCUFCONT_SUCCESS
  28. */
  29. ScufContResult SCDString_reserve(SCDString *const dstr, const size_t new_capacity);
  30. void SCDString_free(SCDString *const dstr);
  31. /**
  32. @param dst Must have been allocated with one of the allocation functions.
  33. @return SCUFCONT_OUT_OF_MEMORY
  34. @return SCUFCONT_SUCCESS
  35. */
  36. ScufContResult SCDString_copy(const SCDString *const src, SCDString *const dst);
  37. bool SCDString_equal(const SCDString *const s1, const SCDString *s2);
  38. bool SCDString_equal_c_str(const SCDString *const s1, const char *s2);
  39. bool SCDString_equal_next_chars_c_str(
  40. const SCDString *const dstr,
  41. const char *str,
  42. const size_t str_len,
  43. const size_t s
  44. );
  45. /**
  46. @return SCUFCONT_OUT_OF_MEMORY
  47. @return SCUFCONT_SUCCESS
  48. */
  49. ScufContResult SCDString_concat_char(SCDString *const dstr, const char ch);
  50. /**
  51. @return SCUFCONT_OUT_OF_MEMORY
  52. @return SCUFCONT_SUCCESS
  53. */
  54. ScufContResult SCDString_concat_c_str(
  55. SCDString *const dstr,
  56. const char *str,
  57. const size_t str_len
  58. );
  59. /**
  60. @return SCUFCONT_OUT_OF_MEMORY
  61. @return SCUFCONT_SUCCESS
  62. */
  63. ScufContResult SCDString_alloc_concat_c_strs(
  64. SCDString *const dstr,
  65. const char *s1,
  66. const size_t s1_len,
  67. const char *s2,
  68. const size_t s2_len
  69. );
  70. /**
  71. @return SCUFCONT_OUT_OF_MEMORY
  72. @return SCUFCONT_SUCCESS
  73. */
  74. ScufContResult SCDString_split(
  75. const SCDString *const dstr,
  76. const char *delim,
  77. SCDString **const split_arr,
  78. size_t *const arr_len
  79. );
  80. void SCDString_split_arr_free(SCDString **const arr, const size_t arr_len);
  81. /**
  82. @return SCUFCONT_OUT_OF_BOUNDS
  83. @return SCUFCONT_SUCCESS
  84. */
  85. ScufContResult SCDString_char_mod(SCDString *const dstr, const size_t at, const char ch);
  86. /**
  87. @return SCUFCONT_OUT_OF_BOUNDS
  88. @return SCUFCONT_SUCCESS
  89. */
  90. ScufContResult SCDString_char_remove_no_resize(SCDString *const dstr, const size_t at);
  91. /**
  92. @return SCUFCONT_OUT_OF_BOUNDS
  93. @return SCUFCONT_SUCCESS
  94. */
  95. ScufContResult SCDString_char_remove(SCDString *const dstr, const size_t at);
  96. /**
  97. @return SCUFCONT_OUT_OF_BOUNDS
  98. @return SCUFCONT_OUT_OF_MEMORY
  99. @return SCUFCONT_SUCCESS
  100. */
  101. ScufContResult SCDString_char_insert(SCDString *const dstr, const size_t at, const char ch);
  102. #endif // SCUFCONT_DSTRING_H_