Add string_init_printf

This commit is contained in:
Patrick Pelissier committed 2020-11-25 22:41:11 +01:00
1 parent 9802fc5098
commit 2a28f8d407
2 files changed
+22 -17

No files matched your search

+8 -3
View File
@@ -4952,16 +4952,16 @@ Swap the content of both strings.
##### void string\_push\_back (string\_t v, char c)
Append the string with the character 'c'
Append the character 'c' to the string 'v'
##### void string\_cat\_str(string\_t v, const char str[])
Append the string 'v' with the array of char 'str'.
Append the array of char 'str' to the string 'v'.
The array of char shall be terminated with 0.
##### void string\_cat(string\_t v, const string\_t v2)
Append the string 'v' with the string 'v2'.
Append the string 'v2' to the string 'v'.
##### int string\_cmp\_str(const string\_t v1, const char str[])
##### int string\_cmp(const string\_t v1, const string\_t str)
@@ -5083,6 +5083,11 @@ Replace in the string 'v' the sub-string defined as starting from 'pos' and
of size 'len' by the string str2.
It assumes that pos+len is before the end of the string of 'v'.
##### void string\_init\_printf(string\_t v, const char format[], ...)
Initialize 'v' to the formatted string 'format'.
'format' is like the printf function family.
##### int string\_printf (string\_t v, const char format[], ...)
Set the string 'v' to the formatted string 'format'.
+14 -14
View File
@@ -142,7 +142,7 @@ string_capacity(const string_t s)
/* Return a writable pointer to the array of char of the string */
static inline char*
stringi_get_str(string_t v)
stringi_get_cstr(string_t v)
{
// Function can be called when contract is not fullfilled
char *const ptr_stack = &v->u.stack.buffer[0];
@@ -223,7 +223,7 @@ string_clean(string_t v)
{
STRINGI_CONTRACT (v);
stringi_set_size(v, 0);
stringi_get_str(v)[0] = 0;
stringi_get_cstr(v)[0] = 0;
STRINGI_CONTRACT (v);
}
@@ -282,7 +282,7 @@ stringi_fit2size (string_t v, size_t size_alloc)
v->u.heap.alloc = alloc;
return ptr;
}
return stringi_get_str(v);
return stringi_get_cstr(v);
}
/* Modify the string capacity to be able to handle at least 'alloc'
@@ -677,7 +677,7 @@ string_left(string_t v, size_t index)
const size_t size = string_size(v);
if (index >= size)
return;
stringi_get_str(v)[index] = 0;
stringi_get_cstr(v)[index] = 0;
stringi_set_size(v,index);
STRINGI_CONTRACT (v);
}
@@ -687,7 +687,7 @@ static inline void
string_right(string_t v, size_t index)
{
STRINGI_CONTRACT (v);
char *ptr = stringi_get_str(v);
char *ptr = stringi_get_cstr(v);
const size_t size = string_size(v);
if (index >= size) {
ptr[0] = 0;
@@ -768,7 +768,7 @@ string_replace_at (string_t v, size_t pos, size_t len, const char str2[])
memmove(&ptr[pos+str2_l], &ptr[pos+str1_l], size - pos - str1_l + 1);
stringi_set_size(v, size + str2_l - str1_l);
} else {
ptr = stringi_get_str(v);
ptr = stringi_get_cstr(v);
}
memcpy (&ptr[pos], str2, str2_l);
STRINGI_CONTRACT (v);
@@ -783,7 +783,7 @@ stringi_replace_all_str_1ge2 (string_t v, const char str1[], size_t str1len, con
/* str1len < str2len so the string doesn't need to be resized */
size_t vlen = string_size(v);
char *org = stringi_get_str(v);
char *org = stringi_get_cstr(v);
char *src = org;
char *dst = org;
@@ -916,7 +916,7 @@ string_printf (string_t v, const char format[], ...)
M_ASSERT (format != NULL);
va_list args;
int size;
char *ptr = stringi_get_str(v);
char *ptr = stringi_get_cstr(v);
size_t alloc = string_capacity(v);
va_start (args, format);
size = vsnprintf (ptr, alloc, format, args);
@@ -951,7 +951,7 @@ string_cat_printf (string_t v, const char format[], ...)
va_list args;
int size;
size_t old_size = string_size(v);
char *ptr = stringi_get_str(v);
char *ptr = stringi_get_cstr(v);
size_t alloc = string_capacity(v);
va_start (args, format);
size = vsnprintf (&ptr[old_size], alloc - old_size, format, args);
@@ -1041,7 +1041,7 @@ string_fget_word (string_t v, const char separator[], FILE *f)
ungetc(d, f);
size_t alloc = string_capacity(v);
char *ptr = stringi_get_str(v);
char *ptr = stringi_get_cstr(v);
ptr[0] = 0;
/* NOTE: We generate a buffer which we give to scanf to parse the string,
@@ -1161,7 +1161,7 @@ static inline void
string_strim(string_t v, const char charac[])
{
STRINGI_CONTRACT (v);
char *ptr = stringi_get_str(v);
char *ptr = stringi_get_cstr(v);
char *b = ptr;
size_t size = string_size(v);
while (size > 0 && stringi_strim_char(b[size-1], charac))
@@ -1745,7 +1745,7 @@ namespace m_string {
#endif
/* Initialize and set a string to the given formatted value. */
#define STRINGI_INIT_PRINTF(v, ...) \
#define string_init_printf(v, ...) \
(string_init (v), string_printf (v, __VA_ARGS__) )
/* Initialize a string with the given list of arguments.
@@ -1756,10 +1756,10 @@ namespace m_string {
C string and string. */
#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L)
#define STRINGI_INIT_WITH(v, ...) \
M_IF_NARGS_EQ1(__VA_ARGS__)(string_init_set, STRINGI_INIT_PRINTF)(v, __VA_ARGS__)
M_IF_NARGS_EQ1(__VA_ARGS__)(string_init_set, string_init_printf)(v, __VA_ARGS__)
#else
#define STRINGI_INIT_WITH(v, ...) \
M_IF_NARGS_EQ1(__VA_ARGS__)(string_init_set_str, STRINGI_INIT_PRINTF)(v, __VA_ARGS__)
M_IF_NARGS_EQ1(__VA_ARGS__)(string_init_set_str, string_init_printf)(v, __VA_ARGS__)
#endif
/* NOTE: Use GCC extension (OBSOLETE) */