Skip to content
Closed
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
st optimize st_insert
  • Loading branch information
funny-falcon committed Jan 8, 2012
commit 042b8b51503c3e0333acbd8d74d61b75efc5f8ee
21 changes: 11 additions & 10 deletions st.c
Original file line number Diff line number Diff line change
Expand Up @@ -420,22 +420,23 @@ 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;
}

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;
Expand All @@ -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++;
}

Expand Down Expand Up @@ -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) {
Expand Down Expand Up @@ -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) {
Expand Down Expand Up @@ -549,16 +551,15 @@ 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);
return;
}

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
Expand Down