--- src/util/set.c | 23 +++++++++++++++++++++++ src/util/set.h | 3 +++ 2 files changed, 26 insertions(+)
diff --git a/src/util/set.c b/src/util/set.c index 2c9b09319ff..b2aa5ba13d5 100644 --- a/src/util/set.c +++ b/src/util/set.c @@ -34,6 +34,7 @@ #include <stdlib.h> #include <assert.h> +#include <string.h> #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. * diff --git a/src/util/set.h b/src/util/set.h index 06e79e15867..4db070a6f10 100644 --- a/src/util/set.h +++ b/src/util/set.h @@ -58,6 +58,9 @@ _mesa_set_create(void *mem_ctx, uint32_t (*key_hash_function)(const void *key), bool (*key_equals_function)(const void *a, const void *b)); +struct set * +_mesa_set_clone(struct set *set, void *dst_mem_ctx); + void _mesa_set_destroy(struct set *set, void (*delete_function)(struct set_entry *entry)); -- 2.17.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev