[Mesa-dev] [PATCH v2 27/64] gallium/util: add new util_dynarray_{shrink, delete} helpers
Samuel Pitoiset
samuel.pitoiset at gmail.com
Thu Jun 8 10:26:09 UTC 2017
On 06/07/2017 06:21 PM, Nicolai Hähnle wrote:
> On 30.05.2017 22:35, Samuel Pitoiset wrote:
>> These helpers will be used for handling dynamic arrays of resident
>> texture/image handles.
>>
>> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
>> ---
>> src/gallium/auxiliary/util/u_dynarray.h | 20 ++++++++++++++++++++
>> 1 file changed, 20 insertions(+)
>>
>> diff --git a/src/gallium/auxiliary/util/u_dynarray.h
>> b/src/gallium/auxiliary/util/u_dynarray.h
>> index 7b7a093d82..d6f3d5c901 100644
>> --- a/src/gallium/auxiliary/util/u_dynarray.h
>> +++ b/src/gallium/auxiliary/util/u_dynarray.h
>> @@ -109,6 +109,26 @@ util_dynarray_trim(struct util_dynarray *buf)
>> #define util_dynarray_element(buf, type, idx) ((type*)(buf)->data +
>> (idx))
>> #define util_dynarray_begin(buf) ((buf)->data)
>> #define util_dynarray_end(buf) ((void*)util_dynarray_element((buf),
>> char, (buf)->size))
>> +#define util_dynarray_shrink(buf, type, begin,
>> end) \
>> + do
>> { \
>> + void *__begin = util_dynarray_element((buf), type,
>> (begin)); \
>> + void *__end = util_dynarray_element((buf), type,
>> (end)); \
>> + if ((end) * sizeof(type) <
>> (buf)->size) \
>> + memmove(__begin, __end, (buf)->size - ((end) *
>> sizeof(type))); \
>> + (buf)->size = (buf)->size - ((end) - (begin)) *
>> sizeof(type); \
>> + } while (0)
>> +#define util_dynarray_delete(buf, type, v) \
>> + do { \
>> + unsigned num_elements = (buf)->size / sizeof(type); \
>> + unsigned i; \
>> + for (i = 0; i < num_elements; i++) { \
>> + type __v = *util_dynarray_element((buf), type, (i)); \
>> + if (v == __v) { \
>> + util_dynarray_shrink((buf), type, i, i + 1); \
>> + break; \
>> + } \
>> + } \
>> + } while (0)
>
> Does the order of elements matter? If not, it would be better to just
> copy the last element into the gap that is left by the deleted element.
It doesn't matter, at least not for bindless handles.
>
> Might be wise to rename the macro to util_dynarray_delete_unordered to
> avoid future confusion.
Fixed locally.
Samuel.
>
> Cheers,
> Nicolai
>
>
>> #endif /* U_DYNARRAY_H */
>>
>
>
More information about the mesa-dev
mailing list