Rename string_search_string into string_search

Rename string_strcoll_string into string_strcoll
 (more coherent API)

Add for C11 a generic encapsulation allowing to
select either the string or the str function.
This commit is contained in:
Patrick Pelissier committed 2017-03-08 21:22:52 +01:00
1 parent 6ba2a60fe9
commit 2e814d03ed
1 file changed
+26 -2
+26 -2
View File
@@ -323,7 +323,7 @@ string_search_str (const string_t v, const char str[])
}
static inline size_t
string_search_string (const string_t v1, const string_t v2)
string_search (const string_t v1, const string_t v2)
{
STRING_CONTRACT (v2);
return string_search_str(v1, string_get_cstr(v2));
@@ -419,7 +419,7 @@ string_replace_str (string_t v, const char str1[], const char str2[])
}
static inline bool
string_replace_string (string_t v, const string_t v1, const string_t v2)
string_replace (string_t v, const string_t v1, const string_t v2)
{
STRING_CONTRACT (v);
STRING_CONTRACT (v1);
@@ -683,4 +683,28 @@ string_in_str(string_t v, FILE *f)
EXT_ALGO(STRING_SPLIT) \
)
/* Macro encapsulation for C11 */
#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
/* Select either the string function or the str function depending on
the b operade to the function.
func1 is the string function / func2 is the str function. */
# define STRINGI_SELECT2(func1,func2,a,b) \
_Generic((b)+0, \
char*: func2, \
const char *: func2, \
default : func1 \
)(a,b)
#define string_set(a,b) STRINGI_SELECT2(string_set, string_set_str, a, b)
#define string_init_set(a,b) STRINGI_SELECT2(string_init_set, string_init_set_str, a, b)
#define string_set(a,b) STRINGI_SELECT2(string_set, string_set_str, a, b)
#define string_cat(a,b) STRINGI_SELECT2(string_cat, string_cat_str, a, b)
#define string_cmp(a,b) STRINGI_SELECT2(string_cmp, string_cmp_str, a, b)
#define string_equal_p(a,b) STRINGI_SELECT2(string_equal_p, string_equal_str_p, a, b)
#define string_search(a,b) STRINGI_SELECT2(string_search, string_search_str, a, b)
#define string_strcoll(a,b) STRINGI_SELECT2(string_strcoll, string_strcoll_str, a, b)
#endif
#endif