|
@@ -4,9 +4,9 @@
|
|
|
#include <string.h>
|
|
#include <string.h>
|
|
|
|
|
|
|
|
#include "scufcont.h"
|
|
#include "scufcont.h"
|
|
|
-#include "DynString.h"
|
|
|
|
|
|
|
+#include "DString.h"
|
|
|
|
|
|
|
|
-ScufContResult DynString_alloc(DynString* dstr, const char* str, const size_t len) {
|
|
|
|
|
|
|
+ScufContResult SCDString_alloc(SCDString* dstr, const char* str, const size_t len) {
|
|
|
dstr->data = (char*) malloc(sizeof(char) * (len + 1));
|
|
dstr->data = (char*) malloc(sizeof(char) * (len + 1));
|
|
|
dstr->len = len;
|
|
dstr->len = len;
|
|
|
dstr->capacity = len + 1;
|
|
dstr->capacity = len + 1;
|
|
@@ -19,7 +19,7 @@ ScufContResult DynString_alloc(DynString* dstr, const char* str, const size_t le
|
|
|
return SCUFCONT_SUCCESS;
|
|
return SCUFCONT_SUCCESS;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-ScufContResult DynString_reserve(DynString* dstr, const size_t new_capacity) {
|
|
|
|
|
|
|
+ScufContResult SCDString_reserve(SCDString* dstr, const size_t new_capacity) {
|
|
|
if (dstr->capacity < new_capacity) {
|
|
if (dstr->capacity < new_capacity) {
|
|
|
errno = 0;
|
|
errno = 0;
|
|
|
dstr->data = (char*) realloc(dstr->data, sizeof(char) * new_capacity);
|
|
dstr->data = (char*) realloc(dstr->data, sizeof(char) * new_capacity);
|
|
@@ -32,7 +32,7 @@ ScufContResult DynString_reserve(DynString* dstr, const size_t new_capacity) {
|
|
|
return SCUFCONT_SUCCESS;
|
|
return SCUFCONT_SUCCESS;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-void DynString_free(DynString* dstr) {
|
|
|
|
|
|
|
+void SCDString_free(SCDString* dstr) {
|
|
|
if (dstr->data != NULL) {
|
|
if (dstr->data != NULL) {
|
|
|
free(dstr->data);
|
|
free(dstr->data);
|
|
|
dstr->data = NULL;
|
|
dstr->data = NULL;
|
|
@@ -41,7 +41,7 @@ void DynString_free(DynString* dstr) {
|
|
|
dstr->capacity = 0;
|
|
dstr->capacity = 0;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-bool DynString_equal(const DynString* s1, const DynString* s2) {
|
|
|
|
|
|
|
+bool SCDString_equal(const SCDString* s1, const SCDString* s2) {
|
|
|
if (s1->data == NULL || s2->data == NULL) {
|
|
if (s1->data == NULL || s2->data == NULL) {
|
|
|
return false;
|
|
return false;
|
|
|
}
|
|
}
|
|
@@ -59,7 +59,7 @@ bool DynString_equal(const DynString* s1, const DynString* s2) {
|
|
|
return true;
|
|
return true;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-bool DynString_equal_c_str(const DynString* s1, const char* s2) {
|
|
|
|
|
|
|
+bool SCDString_equal_c_str(const SCDString* s1, const char* s2) {
|
|
|
if (s1->data == NULL || s2 == NULL) {
|
|
if (s1->data == NULL || s2 == NULL) {
|
|
|
return false;
|
|
return false;
|
|
|
}
|
|
}
|
|
@@ -77,8 +77,8 @@ bool DynString_equal_c_str(const DynString* s1, const char* s2) {
|
|
|
return true;
|
|
return true;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-bool DynString_equal_next_chars_c_str(
|
|
|
|
|
- const DynString* dstr,
|
|
|
|
|
|
|
+bool SCDString_equal_next_chars_c_str(
|
|
|
|
|
+ const SCDString* dstr,
|
|
|
const char* str,
|
|
const char* str,
|
|
|
const size_t str_len,
|
|
const size_t str_len,
|
|
|
size_t s
|
|
size_t s
|
|
@@ -97,14 +97,14 @@ bool DynString_equal_next_chars_c_str(
|
|
|
return true;
|
|
return true;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-ScufContResult DynString_concat_c_str(
|
|
|
|
|
- DynString* dstr,
|
|
|
|
|
|
|
+ScufContResult SCDString_concat_c_str(
|
|
|
|
|
+ SCDString* dstr,
|
|
|
const char* str,
|
|
const char* str,
|
|
|
const size_t str_len
|
|
const size_t str_len
|
|
|
) {
|
|
) {
|
|
|
const size_t new_len = dstr->len + str_len;
|
|
const size_t new_len = dstr->len + str_len;
|
|
|
if (new_len > dstr->capacity) {
|
|
if (new_len > dstr->capacity) {
|
|
|
- ScufContResult res = DynString_reserve(dstr, new_len + 1);
|
|
|
|
|
|
|
+ ScufContResult res = SCDString_reserve(dstr, new_len + 1);
|
|
|
if (res != SCUFCONT_SUCCESS) {
|
|
if (res != SCUFCONT_SUCCESS) {
|
|
|
return res;
|
|
return res;
|
|
|
}
|
|
}
|
|
@@ -117,60 +117,60 @@ ScufContResult DynString_concat_c_str(
|
|
|
return SCUFCONT_SUCCESS;
|
|
return SCUFCONT_SUCCESS;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-ScufContResult DynString_alloc_concat_c_strs(
|
|
|
|
|
- DynString* dstr,
|
|
|
|
|
|
|
+ScufContResult SCDString_alloc_concat_c_strs(
|
|
|
|
|
+ SCDString* dstr,
|
|
|
const char* s1,
|
|
const char* s1,
|
|
|
const size_t s1_len,
|
|
const size_t s1_len,
|
|
|
const char* s2,
|
|
const char* s2,
|
|
|
const size_t s2_len
|
|
const size_t s2_len
|
|
|
) {
|
|
) {
|
|
|
- ScufContResult res = DynString_alloc(dstr, s1, s1_len);
|
|
|
|
|
|
|
+ ScufContResult res = SCDString_alloc(dstr, s1, s1_len);
|
|
|
if (res != SCUFCONT_SUCCESS) {
|
|
if (res != SCUFCONT_SUCCESS) {
|
|
|
return res;
|
|
return res;
|
|
|
}
|
|
}
|
|
|
- res = DynString_concat_c_str(dstr, s2, s2_len);
|
|
|
|
|
|
|
+ res = SCDString_concat_c_str(dstr, s2, s2_len);
|
|
|
if (res != SCUFCONT_SUCCESS) {
|
|
if (res != SCUFCONT_SUCCESS) {
|
|
|
return res;
|
|
return res;
|
|
|
}
|
|
}
|
|
|
return SCUFCONT_SUCCESS;
|
|
return SCUFCONT_SUCCESS;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-ScufContResult DynString_split(
|
|
|
|
|
- const DynString* dstr,
|
|
|
|
|
|
|
+ScufContResult SCDString_split(
|
|
|
|
|
+ const SCDString* dstr,
|
|
|
const char* delim,
|
|
const char* delim,
|
|
|
- DynString** split_arr,
|
|
|
|
|
|
|
+ SCDString** split_arr,
|
|
|
size_t* arr_len
|
|
size_t* arr_len
|
|
|
) {
|
|
) {
|
|
|
ScufContResult ret = SCUFCONT_SUCCESS;
|
|
ScufContResult ret = SCUFCONT_SUCCESS;
|
|
|
*arr_len = 0;
|
|
*arr_len = 0;
|
|
|
- DynString elem;
|
|
|
|
|
- ScufContResult res = DynString_alloc(&elem, "", 0);
|
|
|
|
|
|
|
+ SCDString elem;
|
|
|
|
|
+ ScufContResult res = SCDString_alloc(&elem, "", 0);
|
|
|
if (res != SCUFCONT_SUCCESS) {
|
|
if (res != SCUFCONT_SUCCESS) {
|
|
|
return res;
|
|
return res;
|
|
|
}
|
|
}
|
|
|
const size_t delim_len = strlen(delim);
|
|
const size_t delim_len = strlen(delim);
|
|
|
for (size_t i = 0; i < dstr->len; i++) {
|
|
for (size_t i = 0; i < dstr->len; i++) {
|
|
|
- if (DynString_equal_next_chars_c_str(dstr, delim, delim_len, i)) {
|
|
|
|
|
|
|
+ if (SCDString_equal_next_chars_c_str(dstr, delim, delim_len, i)) {
|
|
|
*arr_len += 1;
|
|
*arr_len += 1;
|
|
|
- *split_arr = realloc(*split_arr, sizeof(DynString) * (*arr_len));
|
|
|
|
|
|
|
+ *split_arr = realloc(*split_arr, sizeof(SCDString) * (*arr_len));
|
|
|
if (split_arr == NULL) {
|
|
if (split_arr == NULL) {
|
|
|
ret = SCUFCONT_OUT_OF_MEMORY;
|
|
ret = SCUFCONT_OUT_OF_MEMORY;
|
|
|
break;
|
|
break;
|
|
|
}
|
|
}
|
|
|
(*split_arr)[(*arr_len) - 1] = elem;
|
|
(*split_arr)[(*arr_len) - 1] = elem;
|
|
|
- res = DynString_alloc(&elem, "", 0);
|
|
|
|
|
|
|
+ res = SCDString_alloc(&elem, "", 0);
|
|
|
if (res != SCUFCONT_SUCCESS) {
|
|
if (res != SCUFCONT_SUCCESS) {
|
|
|
ret = res;
|
|
ret = res;
|
|
|
break;
|
|
break;
|
|
|
}
|
|
}
|
|
|
i += delim_len - 1;
|
|
i += delim_len - 1;
|
|
|
} else {
|
|
} else {
|
|
|
- DynString_concat_c_str(&elem, dstr->data + i, 1);
|
|
|
|
|
|
|
+ SCDString_concat_c_str(&elem, dstr->data + i, 1);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if (ret == SCUFCONT_SUCCESS) {
|
|
if (ret == SCUFCONT_SUCCESS) {
|
|
|
- *split_arr = realloc(*split_arr, sizeof(DynString) * (*arr_len + 1));
|
|
|
|
|
|
|
+ *split_arr = realloc(*split_arr, sizeof(SCDString) * (*arr_len + 1));
|
|
|
if (split_arr != NULL) {
|
|
if (split_arr != NULL) {
|
|
|
(*split_arr)[*arr_len] = elem;
|
|
(*split_arr)[*arr_len] = elem;
|
|
|
*arr_len += 1;
|
|
*arr_len += 1;
|
|
@@ -180,18 +180,18 @@ ScufContResult DynString_split(
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
for (size_t i = 0; i < *arr_len; i++) {
|
|
for (size_t i = 0; i < *arr_len; i++) {
|
|
|
- DynString_free((*split_arr) + i);
|
|
|
|
|
|
|
+ SCDString_free((*split_arr) + i);
|
|
|
}
|
|
}
|
|
|
free(*split_arr);
|
|
free(*split_arr);
|
|
|
*split_arr = NULL;
|
|
*split_arr = NULL;
|
|
|
- DynString_free(&elem);
|
|
|
|
|
|
|
+ SCDString_free(&elem);
|
|
|
|
|
|
|
|
return ret;
|
|
return ret;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-void DynString_split_arr_free(DynString** arr, const size_t arr_len) {
|
|
|
|
|
|
|
+void SCDString_split_arr_free(SCDString** arr, const size_t arr_len) {
|
|
|
for (size_t i = 0; i < arr_len; i++) {
|
|
for (size_t i = 0; i < arr_len; i++) {
|
|
|
- DynString_free((*arr) + i);
|
|
|
|
|
|
|
+ SCDString_free((*arr) + i);
|
|
|
}
|
|
}
|
|
|
free(*arr);
|
|
free(*arr);
|
|
|
*arr = NULL;
|
|
*arr = NULL;
|