X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=lib%2Fshash.c;h=8fd2eb18fcf83a10a244f61190c8ff908c1d6821;hb=aed133bf9bce8f35b666c3052907f525c803c83b;hp=1664baf62e55fd3833302fd120b326dc651a3568;hpb=79903dd171cd7bdbb52710b98dbaa5de1537de87;p=openvswitch diff --git a/lib/shash.c b/lib/shash.c index 1664baf6..8fd2eb18 100644 --- a/lib/shash.c +++ b/lib/shash.c @@ -279,3 +279,14 @@ shash_equal_keys(const struct shash *a, const struct shash *b) } return true; } + +/* Chooses and returns a randomly selected node from 'sh', which must not be + * empty. + * + * I wouldn't depend on this algorithm to be fair, since I haven't analyzed it. + * But it does at least ensure that any node in 'sh' can be chosen. */ +struct shash_node * +shash_random_node(struct shash *sh) +{ + return CONTAINER_OF(hmap_random_node(&sh->map), struct shash_node, node); +}