util/set: add a set_clear function
authorScott D Phillips <scott.d.phillips@intel.com>
Wed, 2 May 2018 16:01:02 +0000 (09:01 -0700)
committerScott D Phillips <scott.d.phillips@intel.com>
Fri, 4 May 2018 17:13:33 +0000 (10:13 -0700)
Clear a set back to the state of having zero entries.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
src/util/set.c
src/util/set.h

index d71f771807f48913dff867e22c5f9da148dc338e..2c9b09319ff9abbd4344b3039bb55ea0a3c03502 100644 (file)
@@ -155,6 +155,29 @@ _mesa_set_destroy(struct set *ht, void (*delete_function)(struct set_entry *entr
    ralloc_free(ht);
 }
 
+/**
+ * Clears all values from the given set.
+ *
+ * If delete_function is passed, it gets called on each entry present before
+ * the set is cleared.
+ */
+void
+_mesa_set_clear(struct set *set, void (*delete_function)(struct set_entry *entry))
+{
+   struct set_entry *entry;
+
+   if (!set)
+      return;
+
+   set_foreach (set, entry) {
+      if (delete_function)
+         delete_function(entry);
+      entry->key = deleted_key;
+   }
+
+   set->entries = set->deleted_entries = 0;
+}
+
 /**
  * Finds a set entry with the given key and hash of that key.
  *
index 9acd2c28c9f02cbea1adf25b179c9f141a37f2d5..06e79e158677b8077bb1658939682fe7fb88494a 100644 (file)
@@ -61,6 +61,9 @@ _mesa_set_create(void *mem_ctx,
 void
 _mesa_set_destroy(struct set *set,
                   void (*delete_function)(struct set_entry *entry));
+void
+_mesa_set_clear(struct set *set,
+                void (*delete_function)(struct set_entry *entry));
 
 struct set_entry *
 _mesa_set_add(struct set *set, const void *key);