[PATCH wayland 1/4] util: Document wl_array

Pekka Paalanen ppaalanen at gmail.com
Tue Sep 20 08:52:00 UTC 2016


On Fri, 16 Sep 2016 15:37:36 -0700
Yong Bakos <junk at humanoriented.com> wrote:

> From: Yong Bakos <ybakos at humanoriented.com>
> 
> Add doxygen comments for wl_array and its methods.
> 
> Signed-off-by: Yong Bakos <ybakos at humanoriented.com>
> ---
>  src/wayland-util.h | 66 +++++++++++++++++++++++++++++++++++++++++++++++++-----
>  1 file changed, 61 insertions(+), 5 deletions(-)
> 
> diff --git a/src/wayland-util.h b/src/wayland-util.h
> index cacc122..fe0507c 100644
> --- a/src/wayland-util.h
> +++ b/src/wayland-util.h
> @@ -206,29 +206,85 @@ wl_list_insert_list(struct wl_list *list, struct wl_list *other);
>  	     pos = tmp,							\
>  	     tmp = wl_container_of(pos->member.prev, tmp, member))
>  
> +/**
> + * \class wl_array
> + *
> + * Dynamic array
> + *

Hi,

we could maybe add a bit more, something like:

A wl_array is a dynamic array that can only grow until completely
released. It is intended for relatively small allocations whose size is
variable or not conveniently known before-hand.

Construction of an array does not require all elements to be of the same
size, but wl_array_for_each() does require all elements to have the same
size.

> + */
>  struct wl_array {
>  	size_t size;
>  	size_t alloc;
>  	void *data;
>  };
>  
> -#define wl_array_for_each(pos, array)					\
> -	for (pos = (array)->data;					\
> -	     (const char *) pos < ((const char *) (array)->data + (array)->size); \
> -	     (pos)++)
> -
> +/**
> + * Initializes the array.
> + *
> + * \param array Array to initialize
> + *
> + * \memberof wl_array
> + */
>  void
>  wl_array_init(struct wl_array *array);
>  
> +/**
> + * Releases the array data.
> + *
> + * \note Leaves the array in an invalid state.
> + *
> + * \param array Array whose data is to be released
> + *
> + * \memberof wl_array
> + */
>  void
>  wl_array_release(struct wl_array *array);
>  
> +/**
> + * Increases the size of the array by \p size bytes.
> + *
> + * \param array Array whose size is to be increased
> + * \param size Number of bytes to increase the size of the array by
> + *
> + * \return A pointer to the beginning of the newly appended space, or NULL when
> + *         resizing fails.
> + *
> + * \memberof wl_array
> + */
>  void *
>  wl_array_add(struct wl_array *array, size_t size);
>  
> +/**
> + * Copies the contents of \p source to \p array.
> + *
> + * \param array Destination array to copy to
> + * \param source Source array to copy from
> + *
> + * \return 0 on success, or -1 on failure
> + *
> + * \memberof wl_array
> + */
>  int
>  wl_array_copy(struct wl_array *array, struct wl_array *source);
>  
> +/**
> + * Iterates over an array.
> + *
> + * This macro expresses a for-each iterator for wl_array. It assigns each
> + * element in the list to \p pos, which can then be referenced in a trailing

s/list/array/

> + * code block.
> + *
> + * \param pos Cursor that each array element will be assigned to

'pos' needs to be a pointer to the array element type, and all elements
in the array must be of the same type and size. That could be
emphasized better.

> + * \param array Array to iterate over
> + *
> + * \relates wl_array
> + * \sa wl_list_for_each()
> + */
> +#define wl_array_for_each(pos, array)					\
> +	for (pos = (array)->data;					\
> +	     (const char *) pos < ((const char *) (array)->data + (array)->size); \
> +	     (pos)++)
> +
>  typedef int32_t wl_fixed_t;
>  
>  static inline double

Good work!


Thanks,
pq
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 811 bytes
Desc: OpenPGP digital signature
URL: <https://lists.freedesktop.org/archives/wayland-devel/attachments/20160920/a1060f2d/attachment.sig>


More information about the wayland-devel mailing list