_xcb_list is no longer used, so remove it. Simplify _xcb_map.
This commit is contained in:
parent
76ad79a7ad
commit
8ab4dcde9d
|
@ -32,20 +32,21 @@
|
||||||
|
|
||||||
typedef struct node {
|
typedef struct node {
|
||||||
struct node *next;
|
struct node *next;
|
||||||
|
unsigned int key;
|
||||||
void *data;
|
void *data;
|
||||||
} node;
|
} node;
|
||||||
|
|
||||||
struct _xcb_list {
|
struct _xcb_map {
|
||||||
node *head;
|
node *head;
|
||||||
node **tail;
|
node **tail;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Private interface */
|
/* Private interface */
|
||||||
|
|
||||||
_xcb_list *_xcb_list_new()
|
_xcb_map *_xcb_map_new()
|
||||||
{
|
{
|
||||||
_xcb_list *list;
|
_xcb_map *list;
|
||||||
list = malloc(sizeof(_xcb_list));
|
list = malloc(sizeof(_xcb_map));
|
||||||
if(!list)
|
if(!list)
|
||||||
return 0;
|
return 0;
|
||||||
list->head = 0;
|
list->head = 0;
|
||||||
|
@ -53,7 +54,7 @@ _xcb_list *_xcb_list_new()
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
void _xcb_list_delete(_xcb_list *list, XCBListFreeFunc do_free)
|
void _xcb_map_delete(_xcb_map *list, XCBListFreeFunc do_free)
|
||||||
{
|
{
|
||||||
if(!list)
|
if(!list)
|
||||||
return;
|
return;
|
||||||
|
@ -68,32 +69,24 @@ void _xcb_list_delete(_xcb_list *list, XCBListFreeFunc do_free)
|
||||||
free(list);
|
free(list);
|
||||||
}
|
}
|
||||||
|
|
||||||
int _xcb_list_append(_xcb_list *list, void *data)
|
int _xcb_map_put(_xcb_map *list, unsigned int key, void *data)
|
||||||
{
|
{
|
||||||
node *cur;
|
node *cur = malloc(sizeof(node));
|
||||||
cur = malloc(sizeof(node));
|
|
||||||
if(!cur)
|
if(!cur)
|
||||||
return 0;
|
return 0;
|
||||||
|
cur->key = key;
|
||||||
cur->data = data;
|
cur->data = data;
|
||||||
cur->next = 0;
|
cur->next = 0;
|
||||||
|
|
||||||
*list->tail = cur;
|
*list->tail = cur;
|
||||||
list->tail = &cur->next;
|
list->tail = &cur->next;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void *_xcb_list_peek_head(_xcb_list *list)
|
void *_xcb_map_remove(_xcb_map *list, unsigned int key)
|
||||||
{
|
|
||||||
if(!list->head)
|
|
||||||
return 0;
|
|
||||||
return list->head->data;
|
|
||||||
}
|
|
||||||
|
|
||||||
void *_xcb_list_remove(_xcb_list *list, int (*cmp)(const void *, const void *), const void *data)
|
|
||||||
{
|
{
|
||||||
node **cur;
|
node **cur;
|
||||||
for(cur = &list->head; *cur; cur = &(*cur)->next)
|
for(cur = &list->head; *cur; cur = &(*cur)->next)
|
||||||
if(cmp(data, (*cur)->data))
|
if((*cur)->key == key)
|
||||||
{
|
{
|
||||||
node *tmp = *cur;
|
node *tmp = *cur;
|
||||||
void *ret = (*cur)->data;
|
void *ret = (*cur)->data;
|
||||||
|
@ -106,67 +99,3 @@ void *_xcb_list_remove(_xcb_list *list, int (*cmp)(const void *, const void *),
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void *_xcb_list_find(_xcb_list *list, int (*cmp)(const void *, const void *), const void *data)
|
|
||||||
{
|
|
||||||
node *cur;
|
|
||||||
for(cur = list->head; cur; cur = cur->next)
|
|
||||||
if(cmp(data, cur->data))
|
|
||||||
return cur->data;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
unsigned int key;
|
|
||||||
void *value;
|
|
||||||
} map_pair;
|
|
||||||
|
|
||||||
_xcb_map *_xcb_map_new(void) __attribute__ ((alias ("_xcb_list_new")));
|
|
||||||
|
|
||||||
void _xcb_map_delete(_xcb_map *q, XCBListFreeFunc do_free)
|
|
||||||
{
|
|
||||||
if(!q)
|
|
||||||
return;
|
|
||||||
while(q->head)
|
|
||||||
{
|
|
||||||
node *cur = q->head;
|
|
||||||
map_pair *pair = cur->data;
|
|
||||||
if(do_free)
|
|
||||||
do_free(pair->value);
|
|
||||||
q->head = cur->next;
|
|
||||||
free(pair);
|
|
||||||
free(cur);
|
|
||||||
}
|
|
||||||
free(q);
|
|
||||||
}
|
|
||||||
|
|
||||||
int _xcb_map_put(_xcb_map *q, unsigned int key, void *data)
|
|
||||||
{
|
|
||||||
map_pair *cur = malloc(sizeof(map_pair));
|
|
||||||
if(!cur)
|
|
||||||
return 0;
|
|
||||||
cur->key = key;
|
|
||||||
cur->value = data;
|
|
||||||
if(!_xcb_list_append(q, cur))
|
|
||||||
{
|
|
||||||
free(cur);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int match_map_pair(const void *key, const void *pair)
|
|
||||||
{
|
|
||||||
return ((map_pair *) pair)->key == *(unsigned int *) key;
|
|
||||||
}
|
|
||||||
|
|
||||||
void *_xcb_map_remove(_xcb_map *q, unsigned int key)
|
|
||||||
{
|
|
||||||
map_pair *cur = _xcb_list_remove(q, match_map_pair, &key);
|
|
||||||
void *ret;
|
|
||||||
if(!cur)
|
|
||||||
return 0;
|
|
||||||
ret = cur->value;
|
|
||||||
free(cur);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
10
src/xcbint.h
10
src/xcbint.h
|
@ -41,17 +41,9 @@ enum workarounds {
|
||||||
|
|
||||||
/* xcb_list.c */
|
/* xcb_list.c */
|
||||||
|
|
||||||
typedef struct _xcb_list _xcb_list;
|
|
||||||
typedef void (*XCBListFreeFunc)(void *);
|
typedef void (*XCBListFreeFunc)(void *);
|
||||||
|
|
||||||
_xcb_list *_xcb_list_new(void);
|
typedef struct _xcb_map _xcb_map;
|
||||||
void _xcb_list_delete(_xcb_list *list, XCBListFreeFunc do_free);
|
|
||||||
int _xcb_list_append(_xcb_list *list, void *data);
|
|
||||||
void *_xcb_list_peek_head(_xcb_list *list);
|
|
||||||
void *_xcb_list_remove(_xcb_list *list, int (*cmp)(const void *, const void *), const void *data);
|
|
||||||
void *_xcb_list_find(_xcb_list *list, int (*cmp)(const void *, const void *), const void *data);
|
|
||||||
|
|
||||||
typedef _xcb_list _xcb_map;
|
|
||||||
|
|
||||||
_xcb_map *_xcb_map_new(void);
|
_xcb_map *_xcb_map_new(void);
|
||||||
void _xcb_map_delete(_xcb_map *q, XCBListFreeFunc do_free);
|
void _xcb_map_delete(_xcb_map *q, XCBListFreeFunc do_free);
|
||||||
|
|
Loading…
Reference in New Issue