@@ -115,6 +115,24 @@ int main() {
115
115
#include "../inline_helper.h"
116
116
117
117
118
+ // hooks for memory allocator, C-runtime allocator used per default
119
+ #ifndef KHASH_MALLOC
120
+ #define KHASH_MALLOC malloc
121
+ #endif
122
+
123
+ #ifndef KHASH_REALLOC
124
+ #define KHASH_REALLOC realloc
125
+ #endif
126
+
127
+ #ifndef KHASH_CALLOC
128
+ #define KHASH_CALLOC calloc
129
+ #endif
130
+
131
+ #ifndef KHASH_FREE
132
+ #define KHASH_FREE free
133
+ #endif
134
+
135
+
118
136
#if UINT_MAX == 0xffffffffu
119
137
typedef unsigned int khint32_t ;
120
138
#elif ULONG_MAX == 0xffffffffu
@@ -265,14 +283,14 @@ static const double __ac_HASH_UPPER = 0.77;
265
283
khval_t *vals; \
266
284
} kh_##name##_t; \
267
285
SCOPE kh_##name##_t *kh_init_##name(void) { \
268
- return (kh_##name##_t*)calloc (1, sizeof(kh_##name##_t)); \
286
+ return (kh_##name##_t*)KHASH_CALLOC (1, sizeof(kh_##name##_t)); \
269
287
} \
270
288
SCOPE void kh_destroy_##name(kh_##name##_t *h) \
271
289
{ \
272
290
if (h) { \
273
- free (h->keys); free (h->flags); \
274
- free (h->vals); \
275
- free (h); \
291
+ KHASH_FREE (h->keys); KHASH_FREE (h->flags); \
292
+ KHASH_FREE (h->vals); \
293
+ KHASH_FREE (h); \
276
294
} \
277
295
} \
278
296
SCOPE void kh_clear_##name(kh_##name##_t *h) \
@@ -305,11 +323,11 @@ static const double __ac_HASH_UPPER = 0.77;
305
323
if (new_n_buckets < 4 ) new_n_buckets = 4 ; \
306
324
if (h -> size >= (khint_t )(new_n_buckets * __ac_HASH_UPPER + 0.5 )) j = 0 ; /* requested size is too small */ \
307
325
else { /* hash table size to be changed (shrink or expand); rehash */ \
308
- new_flags = (khint32_t * )malloc (__ac_fsize (new_n_buckets ) * sizeof (khint32_t )); \
326
+ new_flags = (khint32_t * )KHASH_MALLOC (__ac_fsize (new_n_buckets ) * sizeof (khint32_t )); \
309
327
memset (new_flags , 0xff , __ac_fsize (new_n_buckets ) * sizeof (khint32_t )); \
310
328
if (h -> n_buckets < new_n_buckets ) { /* expand */ \
311
- h -> keys = (khkey_t * )realloc (h -> keys , new_n_buckets * sizeof (khkey_t )); \
312
- if (kh_is_map ) h -> vals = (khval_t * )realloc (h -> vals , new_n_buckets * sizeof (khval_t )); \
329
+ h -> keys = (khkey_t * )KHASH_REALLOC (h -> keys , new_n_buckets * sizeof (khkey_t )); \
330
+ if (kh_is_map ) h -> vals = (khval_t * )KHASH_REALLOC (h -> vals , new_n_buckets * sizeof (khval_t )); \
313
331
} /* otherwise shrink */ \
314
332
} \
315
333
} \
@@ -342,10 +360,10 @@ static const double __ac_HASH_UPPER = 0.77;
342
360
} \
343
361
} \
344
362
if (h -> n_buckets > new_n_buckets ) { /* shrink the hash table */ \
345
- h -> keys = (khkey_t * )realloc (h -> keys , new_n_buckets * sizeof (khkey_t )); \
346
- if (kh_is_map ) h -> vals = (khval_t * )realloc (h -> vals , new_n_buckets * sizeof (khval_t )); \
363
+ h -> keys = (khkey_t * )KHASH_REALLOC (h -> keys , new_n_buckets * sizeof (khkey_t )); \
364
+ if (kh_is_map ) h -> vals = (khval_t * )KHASH_REALLOC (h -> vals , new_n_buckets * sizeof (khval_t )); \
347
365
} \
348
- free (h -> flags ); /* free the working space */ \
366
+ KHASH_FREE (h -> flags ); /* free the working space */ \
349
367
h -> flags = new_flags ; \
350
368
h -> n_buckets = new_n_buckets ; \
351
369
h -> n_occupied = h -> size ; \
0 commit comments