1
0

DString.h 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  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. void SCDString_shrink_to_fit(SCDString *const dstr);
  32. /**
  33. @param dst Must have been allocated with one of the allocation functions.
  34. @return SCUFCONT_OUT_OF_MEMORY
  35. @return SCUFCONT_SUCCESS
  36. */
  37. ScufContResult SCDString_copy(const SCDString *const src, SCDString *const dst);
  38. bool SCDString_equal(const SCDString *const s1, const SCDString *s2);
  39. bool SCDString_equal_c_str(const SCDString *const s1, const char *s2);
  40. bool SCDString_equal_next_chars_c_str(
  41. const SCDString *const dstr,
  42. const char *str,
  43. const size_t str_len,
  44. const size_t s
  45. );
  46. /**
  47. @return SCUFCONT_OUT_OF_MEMORY
  48. @return SCUFCONT_SUCCESS
  49. */
  50. ScufContResult SCDString_concat_char(SCDString *const dstr, const char ch);
  51. /**
  52. @return SCUFCONT_OUT_OF_MEMORY
  53. @return SCUFCONT_SUCCESS
  54. */
  55. ScufContResult SCDString_concat_c_str(
  56. SCDString *const dstr,
  57. const char *str,
  58. const size_t str_len
  59. );
  60. /**
  61. @return SCUFCONT_OUT_OF_MEMORY
  62. @return SCUFCONT_SUCCESS
  63. */
  64. ScufContResult SCDString_alloc_concat_c_strs(
  65. SCDString *const dstr,
  66. const char *s1,
  67. const size_t s1_len,
  68. const char *s2,
  69. const size_t s2_len
  70. );
  71. /**
  72. @return SCUFCONT_OUT_OF_MEMORY
  73. @return SCUFCONT_SUCCESS
  74. */
  75. ScufContResult SCDString_split(
  76. const SCDString *const dstr,
  77. const char *delim,
  78. SCDString **const split_arr,
  79. size_t *const arr_len
  80. );
  81. void SCDString_split_arr_free(SCDString **const arr, const size_t arr_len);
  82. /**
  83. @return SCUFCONT_OUT_OF_BOUNDS
  84. @return SCUFCONT_SUCCESS
  85. */
  86. ScufContResult SCDString_char_mod(SCDString *const dstr, const size_t at, const char ch);
  87. /**
  88. @return SCUFCONT_OUT_OF_BOUNDS
  89. @return SCUFCONT_SUCCESS
  90. */
  91. ScufContResult SCDString_char_remove_no_shrink(SCDString *const dstr, const size_t at);
  92. /**
  93. @return SCUFCONT_OUT_OF_BOUNDS
  94. @return SCUFCONT_SUCCESS
  95. */
  96. ScufContResult SCDString_char_remove(SCDString *const dstr, const size_t at);
  97. /**
  98. @return SCUFCONT_OUT_OF_BOUNDS
  99. @return SCUFCONT_OUT_OF_MEMORY
  100. @return SCUFCONT_SUCCESS
  101. */
  102. ScufContResult SCDString_char_insert(SCDString *const dstr, const size_t at, const char ch);
  103. /**
  104. @return SCUFCONT_OUT_OF_MEMORY
  105. @return SCUFCONT_SUCCESS
  106. */
  107. ScufContResult SCDString_replace_c_str_no_shrink(SCDString *const dstr, const char *str, const size_t str_len);
  108. /**
  109. @return SCUFCONT_OUT_OF_MEMORY
  110. @return SCUFCONT_SUCCESS
  111. */
  112. ScufContResult SCDString_replace_c_str(SCDString *const dstr, const char *str, const size_t str_len);
  113. #endif // SCUFCONT_DSTRING_H_