On Fri, Sep 14, 2018 at 10:46 PM Caio Marcelo de Oliveira Filho <
caio.olive...@intel.com> wrote:

> Useful to walk the array removing elements by swapping them with the
> last element.
> ---
>  src/util/u_dynarray.h | 6 ++++++
>  1 file changed, 6 insertions(+)
>
> diff --git a/src/util/u_dynarray.h b/src/util/u_dynarray.h
> index 6bea481d44b..f74bfc7080b 100644
> --- a/src/util/u_dynarray.h
> +++ b/src/util/u_dynarray.h
> @@ -154,6 +154,12 @@ util_dynarray_trim(struct util_dynarray *buf)
>     for (type *elem = (type *)(buf)->data; \
>          elem < (type *)((char *)(buf)->data + (buf)->size); elem++)
>
> +#define util_dynarray_foreach_reverse(buf, type, elem)          \
> +   if ((buf)->size > 0)                                         \
> +      for (type *elem = util_dynarray_top_ptr(buf, type);       \
> +           elem >= (type *)(buf)->data;                         \
>

I think this works...  I suppose it's theoretically possible that elem--
could underflow.  However, the only way that could happen is if the element
size is really large and the data pointer ends up being really low.


> +           elem--)
>

We could do "elem; elem = elem > (type *)(buf)->data ? elem - 1 : NULL"?
Maybe that's more complicated than it's worth.  Meh.

Reviewed-by: Jason Ekstrand <ja...@jlekstrand.net>

--Jason
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to