added from_cstring_reuse(), added string_cmp(), string_move() + tests

AuthorKonata <konata@posteo.jp>
Date
Commit8a4045d8c7b03b42e041298a03d6e33661756c93
Parent1d1ce8b
4 files changed, 39 insertions(+), 1 deletion(-)
▾Minclude/cutils/dyn_string.h
@@ -49,15 +49,21 @@ static bool string_find_str(const String* haystack, const String* needle, size_t
{
return cutil_memmem(haystack->chars, haystack->length, needle->chars, needle->length, pos);
}
HEDLEY_INLINE
static int string_cmp(const String* s1, const String* s2)
{
return memcmp(s1->chars, s2->chars, s1->length);
}
size_t string_count(const String* string, char character);
bool string_concat(String* string, const String* other);
String* from_cstring(const char* cstring);
String* from_cstring_reuse(char* cstring, size_t capacity);
String* from_cstring_del(char* cstring);
char* to_cstring(const String* string);
char* to_cstring_del(String* string);
void string_move(String* dest, String* src);
#endif /* CUTILS_DYN_STRING_H */
▾Msrc/bitfuncs.c
@@ -13,6 +13,8 @@ char* _bitstring(size_t size, uintmax_t value)
{
leading_zero = false;
ret = malloc(size-i);
if(!ret)
return NULL;
ret[size-i-1] = '\0';
}
if(!leading_zero)
▾Msrc/dyn_string.c
@@ -142,7 +142,23 @@ String* from_cstring(const char* cstring)
string->length = strlen(cstring);
return string;
}
}
String* from_cstring_reuse(char* cstring, size_t capacity)
{
String* string;
if(cstring)
return NULL;
string = malloc(sizeof(*string));
if(!string)
return NULL;
string->length = strlen(cstring);
string->capacity = capacity;
return string;
}
String* from_cstring_del(char* cstring)
@@ -167,3 +183,10 @@ char* to_cstring_del(String* string)
delete_string(string);
return ret;
}
void string_move(String* dest, String* src)
{
free(dest->chars);
dest->chars = src->chars;
free(src);
}
▾Msrc/test.c
@@ -125,6 +125,13 @@ static void test_string(void)
cstring = to_cstring_del(string);
free(cstring);
string = from_cstring("asdyx782");
string2 = from_cstring("asdyx782");
assert(string_cmp(string, string2) == 0);
delete_string(string2);
delete_string(string);
}
static void test_bytearray(void)