diff options
| author | mirichi <[email protected]> | 2013-07-07 22:17:44 +0900 |
|---|---|---|
| committer | mirichi <[email protected]> | 2013-07-07 22:17:44 +0900 |
| commit | cdb23edf312e868bad3a7f8e8fc1a8aa556bcf4a (patch) | |
| tree | 598992bdbc4b097ff3573441858aec9f9fd3a980 /include | |
| parent | 550905000c7007b55f7337e756e7b4ff6a155624 (diff) | |
| download | mruby-cdb23edf312e868bad3a7f8e8fc1a8aa556bcf4a.tar.gz mruby-cdb23edf312e868bad3a7f8e8fc1a8aa556bcf4a.zip | |
It optimizes more.
Diffstat (limited to 'include')
| -rw-r--r-- | include/mruby/khash.h | 11 |
1 files changed, 4 insertions, 7 deletions
diff --git a/include/mruby/khash.h b/include/mruby/khash.h index 8d2991a1f..f374e0f92 100644 --- a/include/mruby/khash.h +++ b/include/mruby/khash.h @@ -97,12 +97,13 @@ kh_fill_flags(uint8_t *p, uint8_t c, size_t len) void kh_alloc_##name(kh_##name##_t *h) \ { \ khint_t sz = h->n_buckets; \ + uint8_t *p = mrb_malloc(h->mrb, sizeof(uint8_t)*sz/4+(sizeof(khkey_t)+sizeof(khval_t))*sz); \ h->size = h->n_occupied = 0; \ h->upper_bound = UPPER_BOUND(sz); \ - h->ed_flags = (uint8_t *)mrb_malloc(h->mrb, sizeof(uint8_t)*sz/4); \ + h->ed_flags = p; \ kh_fill_flags(h->ed_flags, 0xaa, sz/4); \ - h->keys = (khkey_t *)mrb_malloc(h->mrb, sizeof(khkey_t)*sz); \ - h->vals = (khval_t *)mrb_malloc(h->mrb, sizeof(khval_t)*sz); \ + h->keys = (khkey_t *)(p+sizeof(uint8_t)*sz/4); \ + h->vals = (khval_t *)(p+sizeof(uint8_t)*sz/4+sizeof(khkey_t)*sz); \ h->mask = sz-1; \ h->inc = sz/2-1; \ } \ @@ -122,8 +123,6 @@ kh_fill_flags(uint8_t *p, uint8_t c, size_t len) void kh_destroy_##name(kh_##name##_t *h) \ { \ if (h) { \ - mrb_free(h->mrb, h->keys); \ - mrb_free(h->mrb, h->vals); \ mrb_free(h->mrb, h->ed_flags); \ mrb_free(h->mrb, h); \ } \ @@ -167,8 +166,6 @@ kh_fill_flags(uint8_t *p, uint8_t c, size_t len) } \ } \ mrb_free(h->mrb, old_ed_flags); \ - mrb_free(h->mrb, old_keys); \ - mrb_free(h->mrb, old_vals); \ } \ } \ khint_t kh_put_##name(kh_##name##_t *h, khkey_t key) \ |
