diff --git a/src/queue.h b/src/queue.h index 889fdca5..74d4c84b 100644 --- a/src/queue.h +++ b/src/queue.h @@ -129,6 +129,24 @@ } \ } while(0) +#define TAILQ_INSERT_SORTED_R(head, headname, elm, field, cmpfunc) do { \ + if(TAILQ_FIRST(head) == NULL) { \ + TAILQ_INSERT_HEAD(head, elm, field); \ + } else { \ + typeof(elm) _tmp; \ + TAILQ_FOREACH_REVERSE(_tmp,head,headname,field) { \ + if(cmpfunc(elm,_tmp) >= 0) { \ + TAILQ_INSERT_AFTER(head,_tmp,elm,field); \ + break; \ + } \ + if(!TAILQ_PREV(_tmp,headname,field)) { \ + TAILQ_INSERT_BEFORE(_tmp,elm,field); \ + break; \ + } \ + } \ + } \ +} while(0) + #define TAILQ_MOVE(newhead, oldhead, field) do { \ if(TAILQ_FIRST(oldhead)) { \ TAILQ_FIRST(oldhead)->field.tqe_prev = &(newhead)->tqh_first; \