| /* 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; | |
| } |