add function sorted_array_find and marco sorted_id_name_array_init
parent
ce2ee0f482
commit
b03963d4f6
|
|
@ -255,6 +255,12 @@ typedef struct
|
||||||
int count;
|
int count;
|
||||||
} int64_array_t;
|
} int64_array_t;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
id_name_pair_t *elts;
|
||||||
|
int count;
|
||||||
|
} id_name_array_t;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
void *elts;
|
void *elts;
|
||||||
|
|
|
||||||
|
|
@ -172,3 +172,9 @@ int sorted_array_compare_int32(const int32_t *n1, const int32_t *n2)
|
||||||
{
|
{
|
||||||
return *n1 - *n2;
|
return *n1 - *n2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int sorted_array_compare_id_name_pair(const id_name_pair_t *pair1,
|
||||||
|
const id_name_pair_t *pair2)
|
||||||
|
{
|
||||||
|
return fc_compare_int64(pair1->id, pair2->id);
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -66,12 +66,31 @@ extern "C" {
|
||||||
void *base, int *count, const void *elt);
|
void *base, int *count, const void *elt);
|
||||||
|
|
||||||
|
|
||||||
|
/** find element from the sorted array
|
||||||
|
* parameters:
|
||||||
|
* ctx: the context for sorted array
|
||||||
|
* base: the pointer of the sorted array (the first array element)
|
||||||
|
* count: the count of the sorted array
|
||||||
|
* key: the element to find
|
||||||
|
* return: 0 for success, != 0 for error
|
||||||
|
*/
|
||||||
|
static inline void *sorted_array_find(SortedArrayContext *ctx,
|
||||||
|
void *base, const int count, const void *key)
|
||||||
|
{
|
||||||
|
return bsearch(key, base, count, ctx->
|
||||||
|
element_size, ctx->compare_func);
|
||||||
|
}
|
||||||
|
|
||||||
/* comparator for 64 bits integer */
|
/* comparator for 64 bits integer */
|
||||||
int sorted_array_compare_int64(const int64_t *n1, const int64_t *n2);
|
int sorted_array_compare_int64(const int64_t *n1, const int64_t *n2);
|
||||||
|
|
||||||
/* comparator for 32 bits integer */
|
/* comparator for 32 bits integer */
|
||||||
int sorted_array_compare_int32(const int32_t *n1, const int32_t *n2);
|
int sorted_array_compare_int32(const int32_t *n1, const int32_t *n2);
|
||||||
|
|
||||||
|
/* comparator for id name pair (sorted by id) */
|
||||||
|
int sorted_array_compare_id_name_pair(const id_name_pair_t *pair1,
|
||||||
|
const id_name_pair_t *pair2);
|
||||||
|
|
||||||
|
|
||||||
#define sorted_i64_array_init(ctx, allow_duplication) \
|
#define sorted_i64_array_init(ctx, allow_duplication) \
|
||||||
sorted_array_init(ctx, sizeof(int64_t), allow_duplication, \
|
sorted_array_init(ctx, sizeof(int64_t), allow_duplication, \
|
||||||
|
|
@ -81,6 +100,11 @@ extern "C" {
|
||||||
sorted_array_init(ctx, sizeof(int32_t), allow_duplication, \
|
sorted_array_init(ctx, sizeof(int32_t), allow_duplication, \
|
||||||
(int (*)(const void *, const void *))sorted_array_compare_int32)
|
(int (*)(const void *, const void *))sorted_array_compare_int32)
|
||||||
|
|
||||||
|
#define sorted_id_name_array_init(ctx, allow_duplication) \
|
||||||
|
sorted_array_init(ctx, sizeof(id_name_pair_t), allow_duplication, \
|
||||||
|
(int (*)(const void *, const void *)) \
|
||||||
|
sorted_array_compare_id_name_pair)
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue