43
43
/** Check for membership
45
* Check whether link is contained in the list head.
46
* The membership is defined as pointer equivalence.
45
* Check whether link is contained in a list.
46
* Membership is defined as pointer equivalence.
48
* @param link Item to look for.
49
* @param head List to look in.
48
* @param link Item to look for.
49
* @param list List to look in.
51
51
* @return true if link is contained in head, false otherwise.
54
bool list_member(const link_t *link, const link_t *head)
54
int list_member(const link_t *link, const list_t *list)
56
56
bool found = false;
57
link_t *hlp = head->next;
57
link_t *hlp = list->head.next;
59
while (hlp != &list->head) {
71
70
/** Concatenate two lists
73
* Concatenate lists head1 and head2, producing a single
74
* list head1 containing items from both (in head1, head2
75
* order) and empty list head2.
72
* Concatenate lists @a list1 and @a list2, producing a single
73
* list @a list1 containing items from both (in @a list1, @a list2
74
* order) and empty list @a list2.
77
* @param head1 First list and concatenated output
78
* @param head2 Second list and empty output.
76
* @param list1 First list and concatenated output
77
* @param list2 Second list and empty output.
81
void list_concat(link_t *head1, link_t *head2)
80
void list_concat(list_t *list1, list_t *list2)
83
if (list_empty(head2))
82
if (list_empty(list2))
86
head2->next->prev = head1->prev;
87
head2->prev->next = head1;
88
head1->prev->next = head2->next;
89
head1->prev = head2->prev;
90
list_initialize(head2);
85
list2->head.next->prev = list1->head.prev;
86
list2->head.prev->next = &list1->head;
87
list1->head.prev->next = list2->head.next;
88
list1->head.prev = list2->head.prev;
89
list_initialize(list2);
94
* Return the number of items in the list.
96
* @param list List to count.
97
* @return Number of items in the list.
99
unsigned int list_count(const list_t *list)
101
unsigned int count = 0;
103
list_foreach(*list, link) {