diff options
author | shyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-01-15 15:46:44 +0000 |
---|---|---|
committer | shyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-01-15 15:46:44 +0000 |
commit | d3f8488b1cdcd210515e1a81afdc8e3e4a7920b3 (patch) | |
tree | f7c3367a49f50c2b403abe635bedb0ef125b19d2 /st.c | |
parent | 9ed8c1f15e3f755a6421a37ba114562071a98404 (diff) | |
download | ruby-d3f8488b1cdcd210515e1a81afdc8e3e4a7920b3.tar.gz |
st optimize st_insert
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34314 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'st.c')
-rw-r--r-- | st.c | 21 |
1 files changed, 11 insertions, 10 deletions
@@ -420,11 +420,11 @@ st_get_key(st_table *table, register st_data_t key, st_data_t *result) #undef collision_check #define collision_check 1 -static void +static inline void add_direct(st_table * table, st_data_t key, st_data_t value, - st_index_t hash_val, st_index_t bin_pos) + st_index_t hash_val, register st_index_t bin_pos) { - st_table_entry *entry; + register st_table_entry *entry; if (table->num_entries > ST_DEFAULT_MAX_DENSITY * table->num_bins) { rehash(table); bin_pos = hash_val % table->num_bins; @@ -432,10 +432,11 @@ add_direct(st_table * table, st_data_t key, st_data_t value, entry = st_alloc_entry(); + entry->next = table->bins[bin_pos]; + table->bins[bin_pos] = entry; entry->hash = hash_val; entry->key = key; entry->record = value; - entry->next = table->bins[bin_pos]; if (table->head != 0) { entry->fore = 0; (entry->back = table->tail)->fore = entry; @@ -445,7 +446,6 @@ add_direct(st_table * table, st_data_t key, st_data_t value, table->head = table->tail = entry; entry->fore = entry->back = 0; } - table->bins[bin_pos] = entry; table->num_entries++; } @@ -487,7 +487,8 @@ add_packed_direct(st_table *table, st_data_t key, st_data_t value) int st_insert(register st_table *table, register st_data_t key, st_data_t value) { - st_index_t hash_val, bin_pos; + st_index_t hash_val; + register st_index_t bin_pos; register st_table_entry *ptr; if (table->entries_packed) { @@ -518,7 +519,8 @@ int st_insert2(register st_table *table, register st_data_t key, st_data_t value, st_data_t (*func)(st_data_t)) { - st_index_t hash_val, bin_pos; + st_index_t hash_val; + register st_index_t bin_pos; register st_table_entry *ptr; if (table->entries_packed) { @@ -549,7 +551,7 @@ st_insert2(register st_table *table, register st_data_t key, st_data_t value, void st_add_direct(st_table *table, st_data_t key, st_data_t value) { - st_index_t hash_val, bin_pos; + st_index_t hash_val; if (table->entries_packed) { add_packed_direct(table, key, value); @@ -557,8 +559,7 @@ st_add_direct(st_table *table, st_data_t key, st_data_t value) } hash_val = do_hash(key, table); - bin_pos = hash_val % table->num_bins; - add_direct(table, key, value, hash_val, bin_pos); + add_direct(table, key, value, hash_val, hash_val % table->num_bins); } static void |