X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Futil%2Fset.c;h=feef96d16eaf35ff4980821a57189091dbd9413a;hb=6d1890fa07f578aa07071f5e24564d069544bf1a;hp=2c9b09319ff9abbd4344b3039bb55ea0a3c03502;hpb=5c075b085585b1629022d40ce7af9448c7d0e906;p=android-x86%2Fexternal-mesa.git diff --git a/src/util/set.c b/src/util/set.c index 2c9b09319ff..feef96d16ea 100644 --- a/src/util/set.c +++ b/src/util/set.c @@ -34,6 +34,7 @@ #include #include +#include #include "macros.h" #include "ralloc.h" @@ -132,6 +133,28 @@ _mesa_set_create(void *mem_ctx, return ht; } +struct set * +_mesa_set_clone(struct set *set, void *dst_mem_ctx) +{ + struct set *clone; + + clone = ralloc(dst_mem_ctx, struct set); + if (clone == NULL) + return NULL; + + memcpy(clone, set, sizeof(struct set)); + + clone->table = ralloc_array(clone, struct set_entry, clone->size); + if (clone->table == NULL) { + ralloc_free(clone); + return NULL; + } + + memcpy(clone->table, set->table, clone->size * sizeof(struct set_entry)); + + return clone; +} + /** * Frees the given set. * @@ -361,6 +384,15 @@ _mesa_set_remove(struct set *ht, struct set_entry *entry) } /** + * Removes the entry with the corresponding key, if exists. + */ +void +_mesa_set_remove_key(struct set *set, const void *key) +{ + _mesa_set_remove(set, _mesa_set_search(set, key)); +} + +/** * This function is an iterator over the hash table. * * Pass in NULL for the first entry, as in the start of a for loop. Note that