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
4949 {
5050 return cutil_memmem(haystack->chars, haystack->length, needle->chars, needle->length, pos);
5151 }
52+HEDLEY_INLINE
53+static int string_cmp(const String* s1, const String* s2)
54+{
55+ return memcmp(s1->chars, s2->chars, s1->length);
56+}
5257
5358 size_t string_count(const String* string, char character);
5459
5560 bool string_concat(String* string, const String* other);
5661
5762 String* from_cstring(const char* cstring);
63+String* from_cstring_reuse(char* cstring, size_t capacity);
5864 String* from_cstring_del(char* cstring);
5965 char* to_cstring(const String* string);
6066 char* to_cstring_del(String* string);
61-
67+void string_move(String* dest, String* src);
6268
6369 #endif /* CUTILS_DYN_STRING_H */
Msrc/bitfuncs.c
@@ -13,6 +13,8 @@ char* _bitstring(size_t size, uintmax_t value)
1313 {
1414 leading_zero = false;
1515 ret = malloc(size-i);
16+ if(!ret)
17+ return NULL;
1618 ret[size-i-1] = '\0';
1719 }
1820 if(!leading_zero)
Msrc/dyn_string.c
@@ -142,7 +142,23 @@ String* from_cstring(const char* cstring)
142142 string->length = strlen(cstring);
143143 return string;
144144 }
145+}
146+
147+String* from_cstring_reuse(char* cstring, size_t capacity)
148+{
149+ String* string;
150+
151+ if(cstring)
152+ return NULL;
153+
154+ string = malloc(sizeof(*string));
155+ if(!string)
156+ return NULL;
157+
158+ string->length = strlen(cstring);
159+ string->capacity = capacity;
145160
161+ return string;
146162 }
147163
148164 String* from_cstring_del(char* cstring)
@@ -167,3 +183,10 @@ char* to_cstring_del(String* string)
167183 delete_string(string);
168184 return ret;
169185 }
186+
187+void string_move(String* dest, String* src)
188+{
189+ free(dest->chars);
190+ dest->chars = src->chars;
191+ free(src);
192+}
Msrc/test.c
@@ -125,6 +125,13 @@ static void test_string(void)
125125
126126 cstring = to_cstring_del(string);
127127 free(cstring);
128+
129+
130+ string = from_cstring("asdyx782");
131+ string2 = from_cstring("asdyx782");
132+ assert(string_cmp(string, string2) == 0);
133+ delete_string(string2);
134+ delete_string(string);
128135 }
129136
130137 static void test_bytearray(void)