100bf4279Sespie /* insque(3C) routines 200bf4279Sespie This file is in the public domain. */ 300bf4279Sespie 400bf4279Sespie /* 500bf4279Sespie 69588ddcfSespie @deftypefn Supplemental void insque (struct qelem *@var{elem}, struct qelem *@var{pred}) 79588ddcfSespie @deftypefnx Supplemental void remque (struct qelem *@var{elem}) 89588ddcfSespie 99588ddcfSespie Routines to manipulate queues built from doubly linked lists. The 109588ddcfSespie @code{insque} routine inserts @var{elem} in the queue immediately 119588ddcfSespie after @var{pred}. The @code{remque} routine removes @var{elem} from 129588ddcfSespie its containing queue. These routines expect to be passed pointers to 139588ddcfSespie structures which have as their first members a forward pointer and a 149588ddcfSespie back pointer, like this prototype (although no prototype is provided): 159588ddcfSespie 169588ddcfSespie @example 179588ddcfSespie struct qelem @{ 1800bf4279Sespie struct qelem *q_forw; 1900bf4279Sespie struct qelem *q_back; 2000bf4279Sespie char q_data[]; 219588ddcfSespie @}; 229588ddcfSespie @end example 2300bf4279Sespie 249588ddcfSespie @end deftypefn 2500bf4279Sespie 2600bf4279Sespie */ 2700bf4279Sespie 2800bf4279Sespie 2900bf4279Sespie struct qelem { 3000bf4279Sespie struct qelem *q_forw; 3100bf4279Sespie struct qelem *q_back; 3200bf4279Sespie }; 3300bf4279Sespie 3400bf4279Sespie 3500bf4279Sespie void insque(struct qelem * elem,struct qelem * pred)36*20fce977Smiodinsque (struct qelem *elem, struct qelem *pred) 3700bf4279Sespie { 3800bf4279Sespie elem -> q_forw = pred -> q_forw; 3900bf4279Sespie pred -> q_forw -> q_back = elem; 4000bf4279Sespie elem -> q_back = pred; 4100bf4279Sespie pred -> q_forw = elem; 4200bf4279Sespie } 4300bf4279Sespie 4400bf4279Sespie 4500bf4279Sespie void remque(struct qelem * elem)46*20fce977Smiodremque (struct qelem *elem) 4700bf4279Sespie { 4800bf4279Sespie elem -> q_forw -> q_back = elem -> q_back; 4900bf4279Sespie elem -> q_back -> q_forw = elem -> q_forw; 5000bf4279Sespie } 51