On 08/26/2013 04:43 AM, Timothy Arceri wrote:
Signed-off-by: Timothy Arceri <t_arc...@yahoo.com.au> --- src/mesa/main/hash.c | 26 ++++++++++++++++++++++++++ src/mesa/main/hash.h | 3 +++ 2 files changed, 29 insertions(+) diff --git a/src/mesa/main/hash.c b/src/mesa/main/hash.c index 6591af9..8dde8b1 100644 --- a/src/mesa/main/hash.c +++ b/src/mesa/main/hash.c @@ -302,6 +302,32 @@ _mesa_HashDeleteAll(struct _mesa_HashTable *table, /** + * Clone all entries in a hash table, into a new table. + * + * \param table the hash table to clone + */ +struct _mesa_HashTable * +_mesa_HashClone(struct _mesa_HashTable *table)
Can that be const qualified?
+{ + struct hash_entry *entry; + struct _mesa_HashTable *clonetable; + + ASSERT(table); + _glthread_LOCK_MUTEX(table->Mutex); + + clonetable = _mesa_NewHashTable(); + assert(clonetable); + hash_table_foreach(table->ht, entry) { + _mesa_HashInsert(clonetable, (GLint)(uintptr_t)entry->key, entry->data); + } + + _glthread_UNLOCK_MUTEX(table->Mutex); + + return clonetable; +} + + +/** * Walk over all entries in a hash table, calling callback function for each. * Note: we use a separate mutex in this function to avoid a recursive * locking deadlock (in case the callback calls _mesa_HashRemove()) and to diff --git a/src/mesa/main/hash.h b/src/mesa/main/hash.h index 142d284..9208701 100644 --- a/src/mesa/main/hash.h +++ b/src/mesa/main/hash.h @@ -50,6 +50,9 @@ _mesa_HashDeleteAll(struct _mesa_HashTable *table, void (*callback)(GLuint key, void *data, void *userData), void *userData); +extern struct _mesa_HashTable * +_mesa_HashClone(struct _mesa_HashTable *table); + extern void _mesa_HashWalk(const struct _mesa_HashTable *table, void (*callback)(GLuint key, void *data, void *userData),
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev