add list_add_sort to list implementation
This commit is contained in:
parent
8a46c1102f
commit
f1020bd2d5
|
@ -429,6 +429,30 @@ static inline void list_splice_init(struct list_head *list,
|
||||||
&pos->member != (head); \
|
&pos->member != (head); \
|
||||||
pos = n, n = list_entry(n->member.prev, typeof(*n), member))
|
pos = n, n = list_entry(n->member.prev, typeof(*n), member))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* list_add_sort - add a new entry to a sorted list
|
||||||
|
* @new: new entry to be added
|
||||||
|
* @head: list head to add it in
|
||||||
|
* @compare: Compare function to compare two list entries
|
||||||
|
*
|
||||||
|
* Insert a new entry before the specified head.
|
||||||
|
* This is useful for implementing queues.
|
||||||
|
*/
|
||||||
|
static inline void list_add_sort(struct list_head *new, struct list_head *head,
|
||||||
|
int (*compare)(struct list_head *a, struct list_head *b))
|
||||||
|
{
|
||||||
|
struct list_head *pos, *insert = head;
|
||||||
|
|
||||||
|
list_for_each(pos, head) {
|
||||||
|
if (compare(pos, new) < 0)
|
||||||
|
continue;
|
||||||
|
insert = pos;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
list_add_tail(new, insert);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Double linked lists with a single pointer list head.
|
* Double linked lists with a single pointer list head.
|
||||||
* Mostly useful for hash tables where the two pointer list head is
|
* Mostly useful for hash tables where the two pointer list head is
|
||||||
|
|
Loading…
Reference in New Issue