Commit 93904fee authored by ksss's avatar ksss

Refactoring for kh_put

parent 93491cae
...@@ -168,34 +168,30 @@ kh_fill_flags(uint8_t *p, uint8_t c, size_t len) ...@@ -168,34 +168,30 @@ kh_fill_flags(uint8_t *p, uint8_t c, size_t len)
} \ } \
khint_t kh_put_##name(mrb_state *mrb, kh_##name##_t *h, khkey_t key) \ khint_t kh_put_##name(mrb_state *mrb, kh_##name##_t *h, khkey_t key) \
{ \ { \
khint_t kk, k, seen_del = 0; \ khint_t k, del_k; \
if (h->n_occupied >= khash_upper_bound(h)) { \ if (h->n_occupied >= khash_upper_bound(h)) { \
kh_resize_##name(mrb, h, h->n_buckets*2); \ kh_resize_##name(mrb, h, h->n_buckets*2); \
} \ } \
kk = k = __hash_func(mrb,key) & khash_mask(h); \ k = __hash_func(mrb,key) & khash_mask(h); \
del_k = kh_end(h); \
while (!__ac_isempty(h->ed_flags, k)) { \ while (!__ac_isempty(h->ed_flags, k)) { \
if (!__ac_isdel(h->ed_flags, k)) { \ if (!__ac_isdel(h->ed_flags, k)) { \
if (__hash_equal(mrb,h->keys[k], key)) { \ if (__hash_equal(mrb,h->keys[k], key)) { \
seen_del = 0; \ return k; \
break; \
} \ } \
} \ } \
else { \ else { \
seen_del = 1; \ del_k = k; \
} \ } \
k = (k+khash_inc(h)) & khash_mask(h); \ k = (k+khash_inc(h)) & khash_mask(h); \
} \ } \
if (seen_del) { \ if (del_k != kh_end(h)) { \
k = kk; \
while (!__ac_isdel(h->ed_flags, k)) { \
k = (k+khash_inc(h)) % h->n_buckets; \
} \
/* put at del */ \ /* put at del */ \
h->keys[k] = key; \ h->keys[del_k] = key; \
h->ed_flags[k/4] &= ~__m_del[k%4]; \ h->ed_flags[k/4] &= ~__m_del[k%4]; \
h->size++; \ h->size++; \
} \ } \
else if (__ac_isempty(h->ed_flags, k)) { \ else { \
/* put at empty */ \ /* put at empty */ \
h->keys[k] = key; \ h->keys[k] = key; \
h->ed_flags[k/4] &= ~__m_empty[k%4]; \ h->ed_flags[k/4] &= ~__m_empty[k%4]; \
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment