Skip to content

Commit

Permalink
[Feature] Khash: Allow static initialisation
Browse files Browse the repository at this point in the history
  • Loading branch information
vstakhov committed Jun 17, 2023
1 parent aa85bba commit 94a4e33
Showing 1 changed file with 13 additions and 4 deletions.
17 changes: 13 additions & 4 deletions contrib/libucl/khash.h
Original file line number Diff line number Diff line change
Expand Up @@ -197,11 +197,13 @@ static const double __ac_HASH_UPPER = 0.77;
khint32_t *flags; \
khkey_t *keys; \
khval_t *vals; \
} kh_##name##_t;
} kh_##name##_t

#define __KHASH_PROTOTYPES(name, khkey_t, khval_t) \
extern kh_##name##_t * kh_init_##name(void); \
extern void kh_static_init_##name(kh_##name##_t *); \
extern void kh_destroy_##name(kh_##name##_t *h); \
extern void kh_static_destroy_##name(kh_##name##_t *h); \
extern void kh_clear_##name(kh_##name##_t *h); \
extern khint_t kh_get_##name(const kh_##name##_t *h, khkey_t key); \
extern int kh_resize_##name(kh_##name##_t *h, khint_t new_n_buckets); \
Expand All @@ -211,6 +213,9 @@ static const double __ac_HASH_UPPER = 0.77;
#define __KHASH_IMPL(name, SCOPE, khkey_t, khval_t, kh_is_map, __hash_func, __hash_equal) \
SCOPE kh_##name##_t *kh_init_##name(void) { \
return (kh_##name##_t*)kcalloc(1, sizeof(kh_##name##_t)); \
} \
SCOPE void kh_unused(kh_static_init_##name)(kh_##name##_t *target) {\
memset(target, 0, sizeof(*target)); \
} \
SCOPE void kh_destroy_##name(kh_##name##_t *h) \
{ \
Expand All @@ -220,6 +225,10 @@ static const double __ac_HASH_UPPER = 0.77;
kfree(h); \
} \
} \
SCOPE void kh_unused(kh_static_destroy_##name)(kh_##name##_t *h) { \
kfree((void *)h->keys); kfree(h->flags); \
kfree((void *)h->vals); \
} \
SCOPE void kh_unused(kh_clear_##name)(kh_##name##_t *h) \
{ \
if (h && h->flags) { \
Expand Down Expand Up @@ -346,7 +355,7 @@ static const double __ac_HASH_UPPER = 0.77;
} else *ret = 0; /* Don't touch h->keys[x] if present and not deleted */ \
return x; \
} \
SCOPE void kh_del_##name(kh_##name##_t *h, khint_t x) \
SCOPE void kh_unused(kh_del_##name)(kh_##name##_t *h, khint_t x) \
{ \
if (x != h->n_buckets && !__ac_iseither(h->flags, x)) { \
__ac_set_isdel_true(h->flags, x); \
Expand All @@ -355,11 +364,11 @@ static const double __ac_HASH_UPPER = 0.77;
}

#define KHASH_DECLARE(name, khkey_t, khval_t) \
__KHASH_TYPE(name, khkey_t, khval_t) \
__KHASH_TYPE(name, khkey_t, khval_t); \
__KHASH_PROTOTYPES(name, khkey_t, khval_t)

#define KHASH_INIT2(name, SCOPE, khkey_t, khval_t, kh_is_map, __hash_func, __hash_equal) \
__KHASH_TYPE(name, khkey_t, khval_t) \
__KHASH_TYPE(name, khkey_t, khval_t); \
__KHASH_IMPL(name, SCOPE, khkey_t, khval_t, kh_is_map, __hash_func, __hash_equal)

#define KHASH_INIT(name, khkey_t, khval_t, kh_is_map, __hash_func, __hash_equal) \
Expand Down

0 comments on commit 94a4e33

Please sign in to comment.