summaryrefslogtreecommitdiff
path: root/upb_table.c
diff options
context:
space:
mode:
Diffstat (limited to 'upb_table.c')
-rw-r--r--upb_table.c19
1 files changed, 9 insertions, 10 deletions
diff --git a/upb_table.c b/upb_table.c
index 1edf676..d53ab1c 100644
--- a/upb_table.c
+++ b/upb_table.c
@@ -119,10 +119,9 @@ void upb_inttable_insert(struct upb_inttable *t, struct upb_inttable_entry *e)
/* Need to resize. New table of double the size, add old elements to it. */
struct upb_inttable new_table;
upb_inttable_init(&new_table, upb_inttable_size(t)*2, t->t.entry_size);
- for(uint32_t i = 1; i <= upb_inttable_size(t)/2; i++) {
- struct upb_inttable_entry *old_e = intent(t, i);
- if(old_e->key != EMPTYENT) intinsert(&new_table, old_e);
- }
+ struct upb_inttable_entry *old_e;
+ for(old_e = upb_inttable_begin(t); old_e; old_e = upb_inttable_next(t, old_e))
+ intinsert(&new_table, old_e);
upb_inttable_free(t);
*t = new_table;
}
@@ -167,6 +166,7 @@ static void strinsert(struct upb_strtable *t, struct upb_strtable_entry *e)
evictee_e->next = empty_bucket;
break;
}
+ evictee_e = strent(t, evictee_e->next);
}
/* table_e remains set to our mainpos. */
}
@@ -182,10 +182,9 @@ void upb_strtable_insert(struct upb_strtable *t, struct upb_strtable_entry *e)
/* Need to resize. New table of double the size, add old elements to it. */
struct upb_strtable new_table;
upb_strtable_init(&new_table, upb_strtable_size(t)*2, t->t.entry_size);
- for(uint32_t i = 1; i <= upb_strtable_size(t)/2; i++) {
- struct upb_strtable_entry *old_e = strent(t, i);
- if(old_e->key.byte_len != 0) strinsert(&new_table, old_e);
- }
+ struct upb_strtable_entry *old_e;
+ for(old_e = upb_strtable_begin(t); old_e; old_e = upb_strtable_next(t, old_e))
+ strinsert(&new_table, old_e);
upb_strtable_free(t);
*t = new_table;
}
@@ -197,7 +196,7 @@ void *upb_inttable_begin(struct upb_inttable *t) {
}
void *upb_inttable_next(struct upb_inttable *t, struct upb_inttable_entry *cur) {
- struct upb_inttable_entry *end = intent(t, upb_inttable_size(t));
+ struct upb_inttable_entry *end = intent(t, upb_inttable_size(t)+1);
do {
cur = (void*)((char*)cur + t->t.entry_size);
if(cur == end) return NULL;
@@ -210,7 +209,7 @@ void *upb_strtable_begin(struct upb_strtable *t) {
}
void *upb_strtable_next(struct upb_strtable *t, struct upb_strtable_entry *cur) {
- struct upb_strtable_entry *end = strent(t, upb_strtable_size(t));
+ struct upb_strtable_entry *end = strent(t, upb_strtable_size(t)+1);
do {
cur = (void*)((char*)cur + t->t.entry_size);
if(cur == end) return NULL;
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback