| /* insque(3C) routines |
| This file is in the public domain. */ |
| |
| /* |
| |
| @deftypefn Supplemental void insque (struct qelem *@var{elem}, @ |
| struct qelem *@var{pred}) |
| @deftypefnx Supplemental void remque (struct qelem *@var{elem}) |
| |
| Routines to manipulate queues built from doubly linked lists. The |
| @code{insque} routine inserts @var{elem} in the queue immediately |
| after @var{pred}. The @code{remque} routine removes @var{elem} from |
| its containing queue. These routines expect to be passed pointers to |
| structures which have as their first members a forward pointer and a |
| back pointer, like this prototype (although no prototype is provided): |
| |
| @example |
| struct qelem @{ |
| struct qelem *q_forw; |
| struct qelem *q_back; |
| char q_data[]; |
| @}; |
| @end example |
| |
| @end deftypefn |
| |
| */ |
| |
| |
| struct qelem { |
| struct qelem *q_forw; |
| struct qelem *q_back; |
| }; |
| |
| |
| void |
| insque (struct qelem *elem, struct qelem *pred) |
| { |
| elem -> q_forw = pred -> q_forw; |
| pred -> q_forw -> q_back = elem; |
| elem -> q_back = pred; |
| pred -> q_forw = elem; |
| } |
| |
| |
| void |
| remque (struct qelem *elem) |
| { |
| elem -> q_forw -> q_back = elem -> q_back; |
| elem -> q_back -> q_forw = elem -> q_forw; |
| } |