Commit 8abbde02 authored by Martin Mareš's avatar Martin Mareš

Several simplifications of the fib iterators.

parent 0bcba21e
......@@ -86,12 +86,13 @@ void fit_put(struct fib_iterator *, struct fib_node *);
unsigned int count = (fib)->hash_size; \
unsigned int hpos = (it)->hash; \
for(;;) { \
fis_again: if (!z) { \
if (++hpos >= count) \
break; \
z = (fib)->hash_table[hpos]; \
goto fis_again; \
}
if (!z) \
{ \
if (++hpos >= count) \
break; \
z = (fib)->hash_table[hpos]; \
continue; \
}
#define FIB_ITERATE_END(z) z = z->next; } } while(0)
......
......@@ -163,20 +163,20 @@ fib_merge_readers(struct fib_iterator *i, struct fib_node *to)
/* Fast path */
to->readers = i;
i->prev = (struct fib_iterator *) to;
fixup:
while (i && i->node)
{
i->node = NULL;
i = i->next;
}
return;
}
/* Really merging */
while (j->next)
j = j->next;
j->next = i;
i->prev = j;
goto fixup;
else
{
/* Really merging */
while (j->next)
j = j->next;
j->next = i;
i->prev = j;
}
while (i && i->node)
{
i->node = NULL;
i = i->next;
}
}
else /* No more nodes */
while (i)
......@@ -260,7 +260,7 @@ fit_get(struct fib *f, struct fib_iterator *i)
if (!i->prev)
{
/* We are at the end */
i->hash = f->hash_size;
i->hash = ~0 - 1;
return NULL;
}
if (!(n = i->node))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment