14 while (cstr[str.
len] !=
'\0') str.
len++;
18 if (dst->
ptr ==
nullptr || dst->
cap == 0 || src.
ptr ==
nullptr) {
22 ptrdiff_t size = dst->
cap - dst->
len;
32 for (ptrdiff_t i = size - 1; i >= 0; i--) {
36 for (ptrdiff_t i = 0; i < size; i++) {
45 if (dst->
ptr ==
nullptr || dst->
cap == 0 || src.
ptr ==
nullptr) {
49 ptrdiff_t size = src.
len < dst->
cap ? src.
len : dst->
cap;
76 if (str1.
len > str2.
len)
return 1;
77 if (str2.
len > str1.
len)
return -1;
78 if (str1.
ptr == str2.
ptr)
return 0;
80 for (ptrdiff_t i = 0; i < str1.
len; i++) {
81 if (str1.
ptr[i] > str2.
ptr[i])
return 1;
82 if (str2.
ptr[i] > str1.
ptr[i])
return -1;
94 if (str->
ptr && str->
len > 0) {
98 if (str->
cap > 0) str->
cap--;
104 if (str.
ptr && str.
len > 0) {
110 if (!str->
ptr)
return false;
111 if (!prefix.
ptr)
return true;
113 if (str->
len < prefix.
len)
return false;
114 for (ptrdiff_t i = 0; i < prefix.
len; i++)
115 if (str->
ptr[i] != prefix.
ptr[i])
126 return (struct clod_string){
133 while (str.len >= elem.len) {
135 while (i < elem.len && str.ptr[i] == elem.ptr[i]) i++;
148 if (occurrence > 0) {
149 for (ptrdiff_t i = 0; i < str.len; i++) {
150 if (str.ptr[i] == elem) occurrence--;
151 if (occurrence == 0)
return (
struct clod_string){str.ptr + i, str.len - i, str.cap - i};
156 if (occurrence < 0) {
157 for (ptrdiff_t i = str.len; i > 0; i--) {
158 if (str.ptr[i - 1] == elem) occurrence++;
159 if (occurrence == 0)
return (
struct clod_string){str.ptr + i - 1, str.len - i + 1, str.cap - i + 1};
169 struct clod_string,
unsigned char,
unsigned char,
unsigned char) {
170 debug(CLOD_TEST,
"Not Implemented");
176 debug(CLOD_TEST,
"Not Implemented");
CLOD_API bool clod_string_remove_prefix(struct clod_string *str, struct clod_string prefix)
#define CLOD_STRING_NULL
Null string.
size_t clod_string_cat(struct clod_string *dst, struct clod_string src)
CLOD_API struct clod_string clod_string_find(struct clod_string str, char elem, int occurrence)
CLOD_API struct clod_string clod_string_contains(struct clod_string str, struct clod_string elem)
CLOD_API size_t clod_string_put_double(struct clod_string *dst, double val, struct clod_string alphabet, unsigned char base, unsigned char min_digits, unsigned char max_digits)
struct clod_string clod_string_from_cstr(const char *cstr)
Make a string from a C string.
char clod_string_get_char(struct clod_string *str)
Remove a single char from the start of the string.
CLOD_API double clod_string_get_double(struct clod_string *str, struct clod_string alphabet, unsigned char base)
int clod_string_cmp(struct clod_string str1, struct clod_string str2)
char clod_string_peek_char(struct clod_string str)
Get the first char in the string.
void clod_string_put_char(struct clod_string *str, char c)
Append a single char to the end of the string.
size_t clod_string_insert(struct clod_string *dst, struct clod_string src)