mirror of
https://github.com/chhylp123/hifiasm.git
synced 2026-10-10 12:20:56 +08:00
S/L index&reads
This commit is contained in:
@@ -128,6 +128,8 @@ int main() {
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <limits.h>
|
||||
#include <stdio.h>
|
||||
|
||||
|
||||
/* compiler specific configuration */
|
||||
|
||||
@@ -206,7 +208,9 @@ static const double __ac_HASH_UPPER = 0.77;
|
||||
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); \
|
||||
extern khint_t kh_put_##name(kh_##name##_t *h, khkey_t key, int *ret); \
|
||||
extern void kh_del_##name(kh_##name##_t *h, khint_t x);
|
||||
extern void kh_del_##name(kh_##name##_t *h, khint_t x);\
|
||||
extern void kh_write_##name(kh_##name##_t *h, FILE* fp)\
|
||||
extern void kh_load_##name(kh_##name##_t *h, FILE* fp)
|
||||
|
||||
#define __KHASH_IMPL(name, SCOPE, khkey_t, khval_t, kh_is_map, __hash_func, __hash_equal) \
|
||||
SCOPE kh_##name##_t *kh_init_##name(void) { \
|
||||
@@ -352,6 +356,35 @@ static const double __ac_HASH_UPPER = 0.77;
|
||||
__ac_set_isdel_true(h->flags, x); \
|
||||
--h->size; \
|
||||
} \
|
||||
} \
|
||||
SCOPE void kh_write_##name(kh_##name##_t *h, FILE* fp)\
|
||||
{\
|
||||
fwrite(&(h->n_buckets), sizeof(khint_t), 1, fp);\
|
||||
fwrite(&(h->size), sizeof(khint_t), 1, fp);\
|
||||
fwrite(&(h->n_occupied), sizeof(khint_t), 1, fp);\
|
||||
fwrite(&(h->upper_bound), sizeof(khint_t), 1, fp);\
|
||||
if (h->n_buckets)\
|
||||
{\
|
||||
fwrite(h->flags, sizeof(khint32_t), __ac_fsize(h->n_buckets), fp);\
|
||||
fwrite(h->keys, sizeof(khkey_t), h->n_buckets, fp);\
|
||||
fwrite(h->vals, sizeof(khval_t), h->n_buckets, fp);\
|
||||
}\
|
||||
} \
|
||||
SCOPE void kh_load_##name(kh_##name##_t *h, FILE* fp)\
|
||||
{\
|
||||
fread(&(h->n_buckets), sizeof(khint_t), 1, fp);\
|
||||
fread(&(h->size), sizeof(khint_t), 1, fp);\
|
||||
fread(&(h->n_occupied), sizeof(khint_t), 1, fp);\
|
||||
fread(&(h->upper_bound), sizeof(khint_t), 1, fp);\
|
||||
if (h->n_buckets)\
|
||||
{\
|
||||
h->flags = (khint32_t*)kmalloc(__ac_fsize(h->n_buckets) * sizeof(khint32_t));\
|
||||
fread(h->flags, sizeof(khint32_t), __ac_fsize(h->n_buckets), fp);\
|
||||
h->keys = (khkey_t*)kmalloc(sizeof(khkey_t)*h->n_buckets);\
|
||||
fread(h->keys, sizeof(khkey_t), h->n_buckets, fp);\
|
||||
h->vals = (khval_t*)kmalloc(sizeof(khval_t)*h->n_buckets);\
|
||||
fread(h->vals, sizeof(khval_t), h->n_buckets, fp);\
|
||||
}\
|
||||
}
|
||||
|
||||
#define KHASH_DECLARE(name, khkey_t, khval_t) \
|
||||
@@ -624,4 +657,12 @@ typedef const char *kh_cstr_t;
|
||||
#define KHASH_MAP_INIT_STR(name, khval_t) \
|
||||
KHASH_INIT(name, kh_cstr_t, khval_t, 1, kh_str_hash_func, kh_str_hash_equal)
|
||||
|
||||
|
||||
|
||||
|
||||
#define kh_write(name, h, fp) kh_write_##name(h, fp)
|
||||
|
||||
#define kh_load(name, h, fp) kh_load_##name(h, fp)
|
||||
|
||||
|
||||
#endif /* __AC_KHASH_H */
|
||||
|
||||
Reference in New Issue
Block a user