Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define DL_SORTED_INSERT(head,add,cmp) \
- do { \
- LDECLTYPE(head) _pos; \
- _pos = (head); \
- DL_FIND_POS(_pos,add,cmp); \
- DL_INSERT(head,_pos,add); \
- } while (0)
- #define DL_INSERT(head,pos,add) \
- DL_INSERT2(head, pos,add,prev,next) \
- #define DL_INSERT2(head,pos,add,prev,next) \
- do { \
- if ((pos) == NULL) { \
- DL_PREPEND(head,add); \
- } else { \
- DL_INSERT_AFTER(pos,add); \
- if ((add)->next == NULL) { \
- (head)->prev = (add); \
- } \
- } \
- } while (0)
- #define DL_INSERT_AFTER(prior,add) \
- DL_INSERT_AFTER2(prior,add,prev,next) \
- #define DL_INSERT_AFTER2(prior,add,prev,next) \
- do { \
- (add)->next = (prior)->next; \
- (prior)->next = (add); \
- (add)->prev = (prior); \
- if ((add)->next) { \
- (add)->next->prev = (add); \
- } \
- } while (0)
- #define DL_FIND_POS(head,node,cmp) \
- DL_FIND_POS2(head,node,cmp,prev,next) \
- #define DL_FIND_POS2(head,node,cmp,prev,next) \
- do { \
- if (cmp((head), (node)) > 0) { \
- (head) = NULL; \
- } else { \
- for (; (head)->next != NULL; head = (head)->next ) { \
- if (cmp((head)->next, (node)) > 0) { \
- break; \
- } \
- } \
- } \
- } while (0)
Advertisement
Add Comment
Please, Sign In to add comment