diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-09-30 20:15:27 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-09-30 20:15:27 +0900 |
| commit | 4a55b42984d677895d43ddb1bd89c394c3625009 (patch) | |
| tree | 2eb3ee8bdec3b4ce55adf1de430a78cac8cdec4b /mrbgems/mruby-symbol-ext/src | |
| parent | 3e3048ddd15ab6e593830f4f63b97b044a529e4a (diff) | |
| download | mruby-4a55b42984d677895d43ddb1bd89c394c3625009.tar.gz mruby-4a55b42984d677895d43ddb1bd89c394c3625009.zip | |
O(1) mrb_sym2name_len(); close #2591
instead of adding sym->name hash table, linear symbol table is added, and reduced name->sym hash table size.
Diffstat (limited to 'mrbgems/mruby-symbol-ext/src')
| -rw-r--r-- | mrbgems/mruby-symbol-ext/src/symbol.c | 15 |
1 files changed, 4 insertions, 11 deletions
diff --git a/mrbgems/mruby-symbol-ext/src/symbol.c b/mrbgems/mruby-symbol-ext/src/symbol.c index 7ca749999..a96c4017f 100644 --- a/mrbgems/mruby-symbol-ext/src/symbol.c +++ b/mrbgems/mruby-symbol-ext/src/symbol.c @@ -7,8 +7,6 @@ typedef struct symbol_name { const char *name; } symbol_name; -KHASH_DECLARE(n2s, symbol_name, mrb_sym, TRUE) - /* * call-seq: * Symbol.all_symbols => array @@ -27,16 +25,11 @@ KHASH_DECLARE(n2s, symbol_name, mrb_sym, TRUE) static mrb_value mrb_sym_all_symbols(mrb_state *mrb, mrb_value self) { - khiter_t k; - mrb_sym sym; - khash_t(n2s) *h = mrb->name2sym; - mrb_value ary = mrb_ary_new_capa(mrb, kh_size(h)); + mrb_sym i, lim; + mrb_value ary = mrb_ary_new_capa(mrb, mrb->symidx); - for (k = kh_begin(h); k != kh_end(h); k++) { - if (kh_exist(h, k)) { - sym = kh_value(h, k); - mrb_ary_push(mrb, ary, mrb_symbol_value(sym)); - } + for (i=1, lim=mrb->symidx+1; i<lim; i++) { + mrb_ary_push(mrb, ary, mrb_symbol_value(i)); } return ary; |
