2018-03-12 19:48 GMT+01:00 Emil Velikov <emil.l.veli...@gmail.com>: > Hi Thomas, > > On 12 March 2018 at 17:55, Thomas Helland <thomashellan...@gmail.com> wrote: >> V2: Don't rzalloc; we are about to rewrite the whole thing (Vladislav) >> --- >> src/util/hash_table.c | 22 ++++++++++++++++++++++ >> src/util/hash_table.h | 2 ++ >> 2 files changed, 24 insertions(+) >> >> diff --git a/src/util/hash_table.c b/src/util/hash_table.c >> index b7421a0144..f8d5d0f88a 100644 >> --- a/src/util/hash_table.c >> +++ b/src/util/hash_table.c >> @@ -141,6 +141,28 @@ _mesa_hash_table_create(void *mem_ctx, >> return ht; >> } >> >> +struct hash_table * >> +_mesa_hash_table_clone(struct hash_table *src, void *dst_mem_ctx) >> +{ >> + struct hash_table *ht; >> + >> + ht = ralloc(dst_mem_ctx, struct hash_table); >> + if (ht == NULL) >> + return NULL; >> + >> + memcpy(ht, src, sizeof(struct hash_table)); >> + >> + ht->table = ralloc_array(ht, struct hash_entry, ht->size); >> + if (ht->table == NULL) { >> + ralloc_free(ht); >> + return NULL; >> + } >> + >> + memcpy(ht->table, src->table, ht->size * sizeof(struct hash_entry)); >> + > Thinking out loud: > > I'm wondering if it won't make sense to reuse _mesa_hash_table_create, > instead of open-coding it? > > -Emil
That wont work like you might expect. The hash table will then be initialized to the wrong size. We want an exact copy, so we have to make sure we copy also things like size, deleted_entries, etc. If we don't we can not memcpy the array of entries, defeating the main purpose which is to avoid all the insertions into the hash table, -Thomas _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev