#ifndef SORT_H
#define SORT_H
#define INTEGER_CMP(name, type) \
static inline int name(const type *i1, const type *i2) \
{ \
if (*i1 < *i2) \
return -1; \
else if (*i1 > *i2) \
return 1; \
else \
return 0; \
}
INTEGER_CMP(uint64_cmp, uint64_t)
INTEGER_CMP(uint32_cmp, uint32_t)
#define i_qsort(base, nmemb, size, cmp) \
qsort(base, nmemb, size + \
CALLBACK_TYPECHECK(cmp, int (*)(typeof(const typeof(*base) *), \
typeof(const typeof(*base) *))), \
(int (*)(const void *, const void *))cmp)
#define i_bsearch(key, base, nmemb, size, cmp) \
bsearch(key, base, nmemb, size + \
CALLBACK_TYPECHECK(cmp, int (*)(typeof(const typeof(*key) *), \
typeof(const typeof(*base) *))), \
(int (*)(const void *, const void *))cmp)
int bsearch_strcmp(const char *key, const char *const *member) ATTR_PURE;
int bsearch_strcasecmp(const char *key, const char *const *member) ATTR_PURE;
#endif