[PATCH 1/2] utils: Document wl_container_of

Aaron Faanes dafrito at gmail.com
Mon Sep 16 11:46:44 PDT 2013

On Mon, Sep 16, 2013 at 12:57 PM, Bill Spitzak <spitzak at gmail.com> wrote:

>  What if the example was expanded slightly, like so:
>> \code
>> struct wl_container {
>>     wl_list link;
>>     ...
>> };
>> struct wl_container container;
>> struct wl_list *item = &container.link;
>> struct wl_container *sample = NULL;
>> assert(&container == wl_container_of(item, sample, link);
>> \endcode
>> Does this make it clearer (without making it too verbose)?
> No I think it iwas ok as long as the member name is given. Also I would
> perfer an actual example of usage rather than an assert. I would guess that
> most/all users pass the same pointer they are assigning to the macro as the
> pointer-type argument?

That's right. Wayland itself uses wl_container_of around ten times, with
all but one using the sample = wl_container_of(item, sample, link) idiom.

How does this doc look? The first two paragraphs were edited; the remainder
is provided for context.

 * Retrieves a pointer to the containing struct of a given member item.
 * This macro allows conversion from a pointer to a item, in a member called
 * link, to its containing struct. This is useful if you have a contained
 * like a wl_list, wl_listener, or wl_signal, provided via a callback or
 * means and would like to retrieve the struct that contains it.
 * To demonstrate, given a wl_list contained by a wl_resource, the
 * can be retrieved as follows:
 * \code
 * struct wl_list *some_link = ...;
 * struct wl_resource *resource = NULL;
 * resource = wl_container_of(some_link, resource, link);
 * \endcode
 (the rest is unchanged)

Aaron Faanes <dafrito at gmail.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/wayland-devel/attachments/20130916/cd865243/attachment.html>

More information about the wayland-devel mailing list