diff options
author | Joshua Haberman <joshua@reverberate.org> | 2011-02-14 10:24:33 -0800 |
---|---|---|
committer | Joshua Haberman <joshua@reverberate.org> | 2011-02-14 10:24:33 -0800 |
commit | 4f9aeee6c7414bec2e1d8a9d3508dbd21f4d3394 (patch) | |
tree | 9c612f70ba57a593b7885f8e7478cb0399d2c37a /src/upb_table.h | |
parent | 6117730c85e5d64239337f0e8514109054202f5a (diff) |
More completely fixed the 0-key thing.
Unfortunately this degrades hash table lookup performance by
about 8%, which affects the streaming benchmark for googlemessage1
by about 5%. We could get this back at the cost of some memory,
but it would be nice to avoid that.
Diffstat (limited to 'src/upb_table.h')
-rw-r--r-- | src/upb_table.h | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/src/upb_table.h b/src/upb_table.h index 1918e20..e667f0d 100644 --- a/src/upb_table.h +++ b/src/upb_table.h @@ -100,12 +100,11 @@ INLINE uint32_t upb_inttable_bucket(upb_inttable *t, upb_inttable_key_t k) { * ability to optimize. */ INLINE void *upb_inttable_fastlookup(upb_inttable *t, uint32_t key, uint32_t entry_size) { - assert(key != 0); uint32_t bucket = upb_inttable_bucket(t, key); upb_inttable_entry *e; do { e = (upb_inttable_entry*)UPB_INDEX(t->t.entries, bucket-1, entry_size); - if(e->key == key) return e; + if(e->key == key && e->has_entry) return e; } while((bucket = e->next) != UPB_END_OF_CHAIN); return NULL; /* Not found. */ } |