Add wl_array_for_each
authorKristian Høgsberg <krh@bitplanet.net>
Sun, 4 Mar 2012 18:40:49 +0000 (13:40 -0500)
committerKristian Høgsberg <krh@bitplanet.net>
Sun, 4 Mar 2012 18:40:49 +0000 (13:40 -0500)
src/data-device.c
src/wayland-util.h
tests/array-test.c

index 40aa439..57f31ca 100644 (file)
@@ -99,7 +99,7 @@ wl_data_source_send_offer(struct wl_data_source *source,
                          struct wl_resource *target)
 {
        struct wl_data_offer *offer;
-       char **p, **end;
+       char **p;
 
        offer = malloc(sizeof *offer);
        if (offer == NULL)
@@ -122,8 +122,7 @@ wl_data_source_send_offer(struct wl_data_source *source,
 
        wl_data_device_send_data_offer(target, &offer->resource);
 
-       end = source->mime_types.data + source->mime_types.size;
-       for (p = source->mime_types.data; p < end; p++)
+       wl_array_for_each(p, &source->mime_types)
                wl_data_offer_send_offer(&offer->resource, *p);
 
        return &offer->resource;
@@ -401,10 +400,9 @@ destroy_data_source(struct wl_resource *resource)
 {
        struct wl_data_source *source =
                container_of(resource, struct wl_data_source, resource);
-       char **p, **end;
+       char **p;
 
-       end = source->mime_types.data + source->mime_types.size;
-       for (p = source->mime_types.data; p < end; p++)
+       wl_array_for_each(p, &source->mime_types)
                free(*p);
 
        wl_array_release(&source->mime_types);
index 7aa2166..1eca058 100644 (file)
@@ -148,6 +148,11 @@ struct wl_array {
        void *data;
 };
 
+#define wl_array_for_each(pos, array)                                  \
+       for (pos = (array)->data;                                       \
+            (const char *) pos < ((const char *) (array)->data + (array)->size); \
+            (pos)++)
+
 void wl_array_init(struct wl_array *array);
 void wl_array_release(struct wl_array *array);
 void *wl_array_add(struct wl_array *array, int size);
index a7bf8a9..cb62713 100644 (file)
@@ -116,3 +116,21 @@ TEST(array_copy)
        wl_array_release(&source);
        wl_array_release(&copy);
 }
+
+TEST(array_for_each)
+{
+       static const int elements[] = { 77, 12, 45192, 53280, 334455 };
+       struct wl_array array;
+       int *p, i;
+
+       wl_array_init(&array);
+       for (i = 0; i < 5; i++) {
+               p = wl_array_add(&array, sizeof *p);
+               *p = elements[i];
+       }
+
+       i = 0;
+       wl_array_for_each(p, &array)
+               assert(*p == elements[i++]);
+       assert(i == 5);
+}