bsearch-insert-pos.h revision 91f07a54b8102a604dd6410831a73e917a20a06c
810bf6e564ebef9655fc0ca3b5273fbb6022c098Timo Sirainen/* Binary search template */
810bf6e564ebef9655fc0ca3b5273fbb6022c098Timo Sirainen#define BINARY_NUMBER_SEARCH(data, count, value, idx_r) \
9f5f6bdc3fd1304720b5d541bc31eb21417af6cbTimo Sirainen/* If key is found, returns TRUE and sets idx_r to the position where the key
9f5f6bdc3fd1304720b5d541bc31eb21417af6cbTimo Sirainen was found. If key isn't found, returns FALSE and sets idx_r to the position
9f5f6bdc3fd1304720b5d541bc31eb21417af6cbTimo Sirainen where the key should be inserted. */
9f5f6bdc3fd1304720b5d541bc31eb21417af6cbTimo Sirainenbool bsearch_insert_pos(const void *key, const void *base, unsigned int nmemb,
9f5f6bdc3fd1304720b5d541bc31eb21417af6cbTimo Sirainen size_t size, int (*cmp)(const void *, const void *),
9f5f6bdc3fd1304720b5d541bc31eb21417af6cbTimo Sirainen unsigned int *idx_r);
0f184ee80e97f8a8312e9fab4f7f5a9d2187a18fTimo Sirainenbool array_bsearch_insert_pos_i(const struct array *array, const void *key,
0f184ee80e97f8a8312e9fab4f7f5a9d2187a18fTimo Sirainen int (*cmp)(const void *, const void *),
0f184ee80e97f8a8312e9fab4f7f5a9d2187a18fTimo Sirainen unsigned int *idx_r);
0f184ee80e97f8a8312e9fab4f7f5a9d2187a18fTimo Sirainen#define array_bsearch_insert_pos(array, key, cmp, idx_r) \
0f184ee80e97f8a8312e9fab4f7f5a9d2187a18fTimo Sirainen ({(void)(1 ? 0 : cmp(key, ARRAY_TYPE_CAST_CONST(array)NULL)); \
0f184ee80e97f8a8312e9fab4f7f5a9d2187a18fTimo Sirainen array_bsearch_insert_pos_i(&(array)->arr, (const void *)key, \
0f184ee80e97f8a8312e9fab4f7f5a9d2187a18fTimo Sirainen (int (*)(const void *, const void *))cmp, idx_r); })
91f07a54b8102a604dd6410831a73e917a20a06cTimo Sirainen#define array_bsearch_insert_pos(array, key, cmp, idx_r) \
0f184ee80e97f8a8312e9fab4f7f5a9d2187a18fTimo Sirainen array_bsearch_insert_pos_i(&(array)->arr, (const void *)key, \
0f184ee80e97f8a8312e9fab4f7f5a9d2187a18fTimo Sirainen (int (*)(const void *, const void *))cmp, idx_r)