1*98b9484cSchristos /* insque(3C) routines 2*98b9484cSchristos This file is in the public domain. */ 3*98b9484cSchristos 4*98b9484cSchristos /* 5*98b9484cSchristos 6*98b9484cSchristos @deftypefn Supplemental void insque (struct qelem *@var{elem}, @ 7*98b9484cSchristos struct qelem *@var{pred}) 8*98b9484cSchristos @deftypefnx Supplemental void remque (struct qelem *@var{elem}) 9*98b9484cSchristos 10*98b9484cSchristos Routines to manipulate queues built from doubly linked lists. The 11*98b9484cSchristos @code{insque} routine inserts @var{elem} in the queue immediately 12*98b9484cSchristos after @var{pred}. The @code{remque} routine removes @var{elem} from 13*98b9484cSchristos its containing queue. These routines expect to be passed pointers to 14*98b9484cSchristos structures which have as their first members a forward pointer and a 15*98b9484cSchristos back pointer, like this prototype (although no prototype is provided): 16*98b9484cSchristos 17*98b9484cSchristos @example 18*98b9484cSchristos struct qelem @{ 19*98b9484cSchristos struct qelem *q_forw; 20*98b9484cSchristos struct qelem *q_back; 21*98b9484cSchristos char q_data[]; 22*98b9484cSchristos @}; 23*98b9484cSchristos @end example 24*98b9484cSchristos 25*98b9484cSchristos @end deftypefn 26*98b9484cSchristos 27*98b9484cSchristos */ 28*98b9484cSchristos 29*98b9484cSchristos 30*98b9484cSchristos struct qelem { 31*98b9484cSchristos struct qelem *q_forw; 32*98b9484cSchristos struct qelem *q_back; 33*98b9484cSchristos }; 34*98b9484cSchristos 35*98b9484cSchristos 36*98b9484cSchristos void insque(struct qelem * elem,struct qelem * pred)37*98b9484cSchristosinsque (struct qelem *elem, struct qelem *pred) 38*98b9484cSchristos { 39*98b9484cSchristos elem -> q_forw = pred -> q_forw; 40*98b9484cSchristos pred -> q_forw -> q_back = elem; 41*98b9484cSchristos elem -> q_back = pred; 42*98b9484cSchristos pred -> q_forw = elem; 43*98b9484cSchristos } 44*98b9484cSchristos 45*98b9484cSchristos 46*98b9484cSchristos void remque(struct qelem * elem)47*98b9484cSchristosremque (struct qelem *elem) 48*98b9484cSchristos { 49*98b9484cSchristos elem -> q_forw -> q_back = elem -> q_back; 50*98b9484cSchristos elem -> q_back -> q_forw = elem -> q_forw; 51*98b9484cSchristos } 52