[Mesa-dev] [PATCH 05/10] util/set: add a clone function

Caio Marcelo de Oliveira Filho caio.oliveira at intel.com
Thu Jun 28 01:18:31 UTC 2018


---
 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



More information about the mesa-dev mailing list