mirror of
				https://gitlab.freedesktop.org/wayland/wayland.git
				synced 2025-11-03 09:01:42 -05:00 
			
		
		
		
	wayland-util: add method for reserving new object id
wl_map_reserve_new() ensures that new id is valid and will point to an empty array entry.
This commit is contained in:
		
							parent
							
								
									900e4b63ef
								
							
						
					
					
						commit
						bfcd681930
					
				
					 2 changed files with 34 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -46,6 +46,7 @@ void wl_map_init(struct wl_map *map);
 | 
			
		|||
void wl_map_release(struct wl_map *map);
 | 
			
		||||
uint32_t wl_map_insert_new(struct wl_map *map, uint32_t side, void *data);
 | 
			
		||||
int wl_map_insert_at(struct wl_map *map, uint32_t i, void *data);
 | 
			
		||||
int wl_map_reserve_new(struct wl_map *map, uint32_t i);
 | 
			
		||||
void wl_map_remove(struct wl_map *map, uint32_t i);
 | 
			
		||||
void *wl_map_lookup(struct wl_map *map, uint32_t i);
 | 
			
		||||
void wl_map_for_each(struct wl_map *map, wl_iterator_func_t func, void *data);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -214,6 +214,39 @@ wl_map_insert_at(struct wl_map *map, uint32_t i, void *data)
 | 
			
		|||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
WL_EXPORT int
 | 
			
		||||
wl_map_reserve_new(struct wl_map *map, uint32_t i)
 | 
			
		||||
{
 | 
			
		||||
	union map_entry *start;
 | 
			
		||||
	uint32_t count;
 | 
			
		||||
	struct wl_array *entries;
 | 
			
		||||
 | 
			
		||||
	if (i < WL_SERVER_ID_START) {
 | 
			
		||||
		entries = &map->client_entries;
 | 
			
		||||
	} else {
 | 
			
		||||
		entries = &map->server_entries;
 | 
			
		||||
		i -= WL_SERVER_ID_START;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	count = entries->size / sizeof *start;
 | 
			
		||||
 | 
			
		||||
	if (count < i)
 | 
			
		||||
		return -1;
 | 
			
		||||
 | 
			
		||||
	if (count == i) {
 | 
			
		||||
		wl_array_add(entries, sizeof *start);
 | 
			
		||||
		start = entries->data;
 | 
			
		||||
		start[i].data = NULL;
 | 
			
		||||
	} else {
 | 
			
		||||
		start = entries->data;
 | 
			
		||||
		if (start[i].data != NULL) {
 | 
			
		||||
			return -1;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
WL_EXPORT void
 | 
			
		||||
wl_map_remove(struct wl_map *map, uint32_t i)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue