10#define libwapcaplet_h_
106 size_t ssoffset,
size_t sslen,
137#define lwc_string_ref(str) ({lwc_string *__lwc_s = (str); assert(__lwc_s != NULL); __lwc_s->refcnt++; __lwc_s;})
159#define lwc_string_unref(str) { \
160 lwc_string *__lwc_s = (str); \
161 assert(__lwc_s != NULL); \
163 if ((__lwc_s->refcnt == 0) || \
164 ((__lwc_s->refcnt == 1) && (__lwc_s->insensitive == __lwc_s))) \
165 lwc_string_destroy(__lwc_s); \
186#define lwc_string_isequal(str1, str2, ret) \
187 ((*(ret) = ((str1) == (str2))), lwc_error_ok)
213#define lwc_string_caseless_isequal(_str1,_str2,_ret) ({ \
214 lwc_error __lwc_err = lwc_error_ok; \
215 lwc_string *__lwc_str1 = (_str1); \
216 lwc_string *__lwc_str2 = (_str2); \
217 bool *__lwc_ret = (_ret); \
219 if (__lwc_str1->insensitive == NULL) { \
220 __lwc_err = lwc__intern_caseless_string(__lwc_str1); \
222 if (__lwc_err == lwc_error_ok && __lwc_str2->insensitive == NULL) { \
223 __lwc_err = lwc__intern_caseless_string(__lwc_str2); \
225 if (__lwc_err == lwc_error_ok) \
226 *__lwc_ret = (__lwc_str1->insensitive == __lwc_str2->insensitive); \
257#define lwc__assert_and_expr(str, expr) ({assert(str != NULL); expr;})
259#define lwc__assert_and_expr(str, expr) (expr)
274#define lwc_string_data(str) lwc__assert_and_expr(str, (const char *)((str)+1))
282#define lwc_string_length(str) lwc__assert_and_expr(str, (str)->len)
296#define lwc_string_hash_value(str) lwc__assert_and_expr(str, (str)->hash)
306static inline lwc_error lwc_string_caseless_hash_value(
#define assert(expr)
Definition assert.h:32
unsigned int uint32_t
Definition acefiex.h:163
#define NULL
Definition actypes.h:561
lwc_error lwc_string_tolower(lwc_string *str, lwc_string **ret)
Definition libwapcaplet.c:168
lwc_error lwc_intern_substring(lwc_string *str, size_t ssoffset, size_t sslen, lwc_string **ret)
Definition libwapcaplet.c:152
lwc_error lwc_intern_string(const char *s, size_t slen, lwc_string **ret)
Definition libwapcaplet.c:143
uint32_t lwc_hash
Definition libwapcaplet.h:31
struct lwc_string_s lwc_string
enum lwc_error_e lwc_error
void(* lwc_iteration_callback_fn)(lwc_string *str, void *pw)
Definition libwapcaplet.h:56
void lwc_string_destroy(lwc_string *str)
Definition libwapcaplet.c:187
void lwc_iterate_strings(lwc_iteration_callback_fn cb, void *pw)
Definition libwapcaplet.c:270
lwc_error_e
Definition libwapcaplet.h:61
@ lwc_error_ok
Definition libwapcaplet.h:62
@ lwc_error_oom
Definition libwapcaplet.h:63
@ lwc_error_range
Definition libwapcaplet.h:64
uint32_t lwc_refcounter
Definition libwapcaplet.h:26
lwc_error lwc__intern_caseless_string(lwc_string *str)
Definition libwapcaplet.c:255
Definition libwapcaplet.h:41
struct lwc_string_s * next
Definition libwapcaplet.h:43
size_t len
Definition libwapcaplet.h:44
lwc_refcounter refcnt
Definition libwapcaplet.h:46
struct lwc_string_s * insensitive
Definition libwapcaplet.h:47
lwc_hash hash
Definition libwapcaplet.h:45
struct lwc_string_s ** prevptr
Definition libwapcaplet.h:42