[utils] add to feature array with printf syntax
This commit is contained in:
@@ -11,16 +11,17 @@ void feature_array_add(cstring_array *features, size_t count, ...) {
|
|||||||
|
|
||||||
cstring_array_start_token(features);
|
cstring_array_start_token(features);
|
||||||
|
|
||||||
for (size_t i = 0; i < count - 1; i++) {
|
bool strip_separator = true;
|
||||||
char *arg = va_arg(args, char *);
|
char_array_append_vjoined(features->str, FEATURE_SEPARATOR_CHAR, strip_separator, count, args);
|
||||||
char_array_append(features->str, arg);
|
va_end(args);
|
||||||
char_array_append(features->str, FEATURE_SEPARATOR_CHAR);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
char *arg = va_arg(args, char *);
|
|
||||||
char_array_append(features->str, arg);
|
|
||||||
char_array_terminate(features->str);
|
|
||||||
|
|
||||||
|
void feature_array_add_printf(cstring_array *features, char *format, ...) {
|
||||||
|
va_list args;
|
||||||
|
va_start(args, format);
|
||||||
|
cstring_array_start_token(features);
|
||||||
|
char_array_cat_vprintf(features->str, format, args);
|
||||||
va_end(args);
|
va_end(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,9 @@
|
|||||||
|
|
||||||
void feature_array_add(cstring_array *features, size_t count, ...);
|
void feature_array_add(cstring_array *features, size_t count, ...);
|
||||||
|
|
||||||
|
// Add feature using printf format
|
||||||
|
void feature_array_add_printf(cstring_array *features, char *format, ...);
|
||||||
|
|
||||||
// Add feature count to dictionary
|
// Add feature count to dictionary
|
||||||
|
|
||||||
bool feature_counts_update(khash_t(str_uint32) *features, char *feature, int count);
|
bool feature_counts_update(khash_t(str_uint32) *features, char *feature, int count);
|
||||||
|
|||||||
@@ -542,7 +542,7 @@ inline void char_array_add_len(char_array *array, char *str, size_t len) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void vchar_array_append_joined(char_array *array, char *separator, bool strip_separator, int count, va_list args) {
|
void char_array_append_vjoined(char_array *array, char *separator, bool strip_separator, int count, va_list args) {
|
||||||
if (count <= 0) {
|
if (count <= 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -552,7 +552,6 @@ static void vchar_array_append_joined(char_array *array, char *separator, bool s
|
|||||||
for (size_t i = 0; i < count - 1; i++) {
|
for (size_t i = 0; i < count - 1; i++) {
|
||||||
char *arg = va_arg(args, char *);
|
char *arg = va_arg(args, char *);
|
||||||
size_t len = strlen(arg);
|
size_t len = strlen(arg);
|
||||||
if (len == 0) continue;
|
|
||||||
|
|
||||||
if (strip_separator &&
|
if (strip_separator &&
|
||||||
((separator_len == 1 && arg[len-1] == separator[0]) ||
|
((separator_len == 1 && arg[len-1] == separator[0]) ||
|
||||||
@@ -573,7 +572,7 @@ static void vchar_array_append_joined(char_array *array, char *separator, bool s
|
|||||||
inline void char_array_add_joined(char_array *array, char *separator, bool strip_separator, int count, ...) {
|
inline void char_array_add_joined(char_array *array, char *separator, bool strip_separator, int count, ...) {
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start(args, count);
|
va_start(args, count);
|
||||||
vchar_array_append_joined(array, separator, strip_separator, count, args);
|
char_array_append_vjoined(array, separator, strip_separator, count, args);
|
||||||
va_end(args);
|
va_end(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -581,15 +580,11 @@ inline void char_array_cat_joined(char_array *array, char *separator, bool strip
|
|||||||
char_array_strip_nul_byte(array);
|
char_array_strip_nul_byte(array);
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start(args, count);
|
va_start(args, count);
|
||||||
vchar_array_append_joined(array, separator, strip_separator, count, args);
|
char_array_append_vjoined(array, separator, strip_separator, count, args);
|
||||||
va_end(args);
|
va_end(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Based on antirez's sdscatvprintf implementation
|
void char_array_cat_vprintf(char_array *array, char *format, va_list args) {
|
||||||
void char_array_cat_printf(char_array *array, char *format, ...) {
|
|
||||||
va_list args;
|
|
||||||
va_start(args, format);
|
|
||||||
|
|
||||||
char_array_strip_nul_byte(array);
|
char_array_strip_nul_byte(array);
|
||||||
|
|
||||||
va_list cpy;
|
va_list cpy;
|
||||||
@@ -605,10 +600,10 @@ void char_array_cat_printf(char_array *array, char *format, ...) {
|
|||||||
buf = array->a + last_n;
|
buf = array->a + last_n;
|
||||||
buflen = size - last_n;
|
buflen = size - last_n;
|
||||||
if (buf == NULL) return;
|
if (buf == NULL) return;
|
||||||
array->a[size-2] = '\0';
|
array->a[size - 2] = '\0';
|
||||||
va_copy(cpy, args);
|
va_copy(cpy, args);
|
||||||
vsnprintf(buf, buflen, format, cpy);
|
vsnprintf(buf, buflen, format, cpy);
|
||||||
if (array->a[size-2] != '\0') {
|
if (array->a[size - 2] != '\0') {
|
||||||
size *= 2;
|
size *= 2;
|
||||||
continue;
|
continue;
|
||||||
} else {
|
} else {
|
||||||
@@ -616,7 +611,12 @@ void char_array_cat_printf(char_array *array, char *format, ...) {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void char_array_cat_printf(char_array *array, char *format, ...) {
|
||||||
|
va_list args;
|
||||||
|
va_start(args, format);
|
||||||
|
char_array_cat_vprintf(array, format, args);
|
||||||
va_end(args);
|
va_end(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -115,9 +115,11 @@ void char_array_cat_reversed(char_array *array, char *str);
|
|||||||
void char_array_cat_reversed_len(char_array *array, char *str, size_t len);
|
void char_array_cat_reversed_len(char_array *array, char *str, size_t len);
|
||||||
|
|
||||||
// Similar to cat methods but with printf args
|
// Similar to cat methods but with printf args
|
||||||
|
void char_array_cat_vprintf(char_array *array, char *format, va_list args);
|
||||||
void char_array_cat_printf(char_array *array, char *format, ...);
|
void char_array_cat_printf(char_array *array, char *format, ...);
|
||||||
|
|
||||||
// Mainly for paths or delimited strings
|
// Mainly for paths or delimited strings
|
||||||
|
void char_array_append_vjoined(char_array *array, char *separator, bool strip_separator, int count, va_list args);
|
||||||
void char_array_add_joined(char_array *array, char *separator, bool strip_separator, int count, ...);
|
void char_array_add_joined(char_array *array, char *separator, bool strip_separator, int count, ...);
|
||||||
void char_array_cat_joined(char_array *array, char *separator, bool strip_separator, int count, ...);
|
void char_array_cat_joined(char_array *array, char *separator, bool strip_separator, int count, ...);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user