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

Reply via email to