====== string ======
C string helpers
===== Functions =====
==== find_substrings ====
Finds the indicies of all locations of the given needle in the haystack. ''%%substrings%%'' is an array of ''%%size_t%%'' indicies that the substring is found at. This function allocates the memory for ''%%substrings%%'' and memory cleanup is managed by the user. ''%%num_substrings%%'' is a pointer to a pre-allocated ''%%size_t%%'' that will be modified to contain the number of found substrings and subsequently the size of ''%%substrings%%''.
If no substrings are found, ''%%substrings%%'' will not be allocated and left set to ''%%NULL%%'', ''%%num_substrings%%'' will be ''%%0%%'', and the function will return ''%%0%%''.
Returns 0 if the function is successful. Returns a non-zero value if there is an error.
int find_substrings(const char* haystack, const char* needle, size_t *num_substrings, size_t **substrings);
/* Usage */
const char* haystack = "One two three two";
const char* needle = "two";
size_t subs_sz = 0;
size_t *subs = NULL;
size_t *subs = find_substrings(haystack, needle, &subs_sz, &subs);
// subs: [ 4, 14 ]
// subs_sz: 2
free(subs);
==== substr ====
Extracts a substring at a specific index and length. This function returns a copy of the substring in a heap allocated buffer that the user is responsible for freeing. Returns ''%%NULL%%'' if there is an error.
const char* substr(const char* str, size_t idx, size_t len);
/* Usage */
const char *s = substr("One two three", 4, 3);
assert(strcmp(s, "two") == 0);
free(s);