mirror of
				https://gitlab.freedesktop.org/wayland/wayland.git
				synced 2025-11-03 09:01:42 -05:00 
			
		
		
		
	Add wl_array_for_each
This commit is contained in:
		
							parent
							
								
									ab0c7c58b9
								
							
						
					
					
						commit
						8e2cac7ae4
					
				
					 3 changed files with 27 additions and 6 deletions
				
			
		| 
						 | 
				
			
			@ -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);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -116,3 +116,21 @@ TEST(array_copy)
 | 
			
		|||
	wl_array_release(&source);
 | 
			
		||||
	wl_array_release(©);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue