From f0f43a3ad6ee46d6e6378325fc03b1adadd35c41 Mon Sep 17 00:00:00 2001 From: Michael Forney Date: Mon, 1 Jul 2019 23:13:26 -0700 Subject: [PATCH] Use static inline functions instead of macros --- include/libwapcaplet/libwapcaplet.h | 102 +++++++++++----------------- 1 file changed, 39 insertions(+), 63 deletions(-) diff --git a/include/libwapcaplet/libwapcaplet.h b/include/libwapcaplet/libwapcaplet.h index 57e2e48..96dd7aa 100644 --- a/include/libwapcaplet/libwapcaplet.h +++ b/include/libwapcaplet/libwapcaplet.h @@ -133,17 +133,21 @@ extern lwc_error lwc_string_tolower(lwc_string *str, lwc_string **ret); * @note Use this if copying the string and intending both sides to retain * ownership. */ -#if defined(STMTEXPR) -#define lwc_string_ref(str) ({lwc_string *__lwc_s = (str); assert(__lwc_s != NULL); __lwc_s->refcnt++; __lwc_s;}) -#else -static inline lwc_string * -lwc_string_ref(lwc_string *str) +static inline lwc_string *lwc_string_ref(lwc_string *str) { assert(str != NULL); str->refcnt++; return str; } -#endif + +/** + * Destroy an unreffed lwc_string. + * + * This destroys an lwc_string whose reference count indicates that it should be. + * + * @param str The string to unref. + */ +extern void lwc_string_destroy(lwc_string *str); /** * Release a reference on an lwc_string. @@ -156,23 +160,14 @@ lwc_string_ref(lwc_string *str) * freed. (Ref count of 1 where string is its own insensitve match * will also result in the string being freed.) */ -#define lwc_string_unref(str) { \ - lwc_string *__lwc_s = (str); \ - assert(__lwc_s != NULL); \ - __lwc_s->refcnt--; \ - if ((__lwc_s->refcnt == 0) || \ - ((__lwc_s->refcnt == 1) && (__lwc_s->insensitive == __lwc_s))) \ - lwc_string_destroy(__lwc_s); \ - } - -/** - * Destroy an unreffed lwc_string. - * - * This destroys an lwc_string whose reference count indicates that it should be. - * - * @param str The string to unref. - */ -extern void lwc_string_destroy(lwc_string *str); +static inline void lwc_string_unref(lwc_string *str) +{ + assert(str != NULL); + str->refcnt--; + if ((str->refcnt == 0) || + ((str->refcnt == 1) && (str->insensitive == str))) + lwc_string_destroy(str); +} /** * Check if two interned strings are equal. @@ -183,8 +178,12 @@ extern void lwc_string_destroy(lwc_string *str); * @return Result of operation, if not ok then value pointed to * by \a ret will not be valid. */ -#define lwc_string_isequal(str1, str2, ret) \ - ((*(ret) = ((str1) == (str2))), lwc_error_ok) +static inline lwc_error lwc_string_isequal( + lwc_string *str1, lwc_string *str2, bool *ret) +{ + *ret = (str1 == str2); + return lwc_error_ok; +} /** * Intern a caseless copy of the passed string. @@ -200,7 +199,6 @@ extern void lwc_string_destroy(lwc_string *str); extern lwc_error lwc__intern_caseless_string(lwc_string *str); -#if defined(STMTEXPR) /** * Check if two interned strings are case-insensitively equal. * @@ -210,33 +208,6 @@ lwc__intern_caseless_string(lwc_string *str); * @return Result of operation, if not ok then value pointed to by \a ret will * not be valid. */ -#define lwc_string_caseless_isequal(_str1,_str2,_ret) ({ \ - lwc_error __lwc_err = lwc_error_ok; \ - lwc_string *__lwc_str1 = (_str1); \ - lwc_string *__lwc_str2 = (_str2); \ - bool *__lwc_ret = (_ret); \ - \ - if (__lwc_str1->insensitive == NULL) { \ - __lwc_err = lwc__intern_caseless_string(__lwc_str1); \ - } \ - if (__lwc_err == lwc_error_ok && __lwc_str2->insensitive == NULL) { \ - __lwc_err = lwc__intern_caseless_string(__lwc_str2); \ - } \ - if (__lwc_err == lwc_error_ok) \ - *__lwc_ret = (__lwc_str1->insensitive == __lwc_str2->insensitive); \ - __lwc_err; \ - }) - -#else -/** - * Check if two interned strings are case-insensitively equal. - * - * @param str1 The first string in the comparison. - * @param str2 The second string in the comparison. - * @param ret A pointer to a boolean to be filled out with the result. - * @return Result of operation, if not ok then value pointed to by \a ret will - * not be valid. - */ static inline lwc_error lwc_string_caseless_isequal(lwc_string *str1, lwc_string *str2, bool *ret) { @@ -251,13 +222,6 @@ lwc_string_caseless_isequal(lwc_string *str1, lwc_string *str2, bool *ret) *ret = (str1->insensitive == str2->insensitive); return err; } -#endif - -#if defined(STMTEXPR) -#define lwc__assert_and_expr(str, expr) ({assert(str != NULL); expr;}) -#else -#define lwc__assert_and_expr(str, expr) (expr) -#endif /** * Retrieve the data pointer for an interned string. @@ -271,7 +235,11 @@ lwc_string_caseless_isequal(lwc_string *str1, lwc_string *str2, bool *ret) * in future. Any code relying on it currently should be * modified to use ::lwc_string_length if possible. */ -#define lwc_string_data(str) lwc__assert_and_expr(str, (const char *)((str)+1)) +static inline const char *lwc_string_data(lwc_string *str) +{ + assert(str != NULL); + return (const char *)(str + 1); +} /** * Retrieve the data length for an interned string. @@ -279,7 +247,11 @@ lwc_string_caseless_isequal(lwc_string *str1, lwc_string *str2, bool *ret) * @param str The string to retrieve the length of. * @return The length of \a str. */ -#define lwc_string_length(str) lwc__assert_and_expr(str, (str)->len) +static inline size_t lwc_string_length(lwc_string *str) +{ + assert(str != NULL); + return str->len; +} /** * Retrieve (or compute if unavailable) a hash value for the content of the string. @@ -293,7 +265,11 @@ lwc_string_caseless_isequal(lwc_string *str1, lwc_string *str2, bool *ret) * to be stable between invocations of the program. Never use the hash * value as a way to directly identify the value of the string. */ -#define lwc_string_hash_value(str) lwc__assert_and_expr(str, (str)->hash) +static inline lwc_hash lwc_string_hash_value(lwc_string *str) +{ + assert(str != NULL); + return str->hash; +} /** * Retrieve a hash value for the caseless content of the string. -- 2.26.2