summaryrefslogtreecommitdiff
path: root/src/upb_table.h
diff options
context:
space:
mode:
authorJoshua Haberman <joshua@reverberate.org>2011-02-14 10:24:33 -0800
committerJoshua Haberman <joshua@reverberate.org>2011-02-14 10:24:33 -0800
commit4f9aeee6c7414bec2e1d8a9d3508dbd21f4d3394 (patch)
tree9c612f70ba57a593b7885f8e7478cb0399d2c37a /src/upb_table.h
parent6117730c85e5d64239337f0e8514109054202f5a (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.h3
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. */
}
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback