X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lib%2Fhindex.h;h=631fd487d9079feb39ca7464699522a39c8ee236;hb=3d91d9094dcf49c210bd4ebae4bd1e0cea9defce;hp=ce46596ad7cec98118bab1527f8899d5ac6941a3;hpb=55d2690646769467b6d26ad55516ff6eeb12869d;p=sliver-openvswitch.git diff --git a/lib/hindex.h b/lib/hindex.h index ce46596ad..631fd487d 100644 --- a/lib/hindex.h +++ b/lib/hindex.h @@ -132,7 +132,18 @@ void hindex_remove(struct hindex *, struct hindex_node *); NODE != OBJECT_CONTAINING(NULL, NODE, MEMBER); \ ASSIGN_CONTAINER(NODE, (NODE)->MEMBER.s, MEMBER)) -struct hindex_node *hindex_node_with_hash(const struct hindex *, size_t hash); +/* Returns the head node in 'hindex' with the given 'hash', or a null pointer + * if no nodes have that hash value. */ +static inline struct hindex_node * +hindex_node_with_hash(const struct hindex *hindex, size_t hash) +{ + struct hindex_node *node = hindex->buckets[hash & hindex->mask]; + + while (node && node->hash != hash) { + node = node->d; + } + return node; +} /* Iteration. */ @@ -147,7 +158,7 @@ struct hindex_node *hindex_node_with_hash(const struct hindex *, size_t hash); #define HINDEX_FOR_EACH_SAFE(NODE, NEXT, MEMBER, HINDEX) \ for (ASSIGN_CONTAINER(NODE, hindex_first(HINDEX), MEMBER); \ (NODE != OBJECT_CONTAINING(NULL, NODE, MEMBER) \ - ? ASSIGN_CONTAINER(NEXT, hindex_next(HINDEX, &(NODE)->MEMBER), MEMBER) \ + ? ASSIGN_CONTAINER(NEXT, hindex_next(HINDEX, &(NODE)->MEMBER), MEMBER), 1 \ : 0); \ (NODE) = (NEXT))