12a6b7db3Sskrll /* insque(3C) routines 22a6b7db3Sskrll This file is in the public domain. */ 32a6b7db3Sskrll 42a6b7db3Sskrll /* 52a6b7db3Sskrll 6*883529b6Schristos @deftypefn Supplemental void insque (struct qelem *@var{elem}, @ 7*883529b6Schristos struct qelem *@var{pred}) 82a6b7db3Sskrll @deftypefnx Supplemental void remque (struct qelem *@var{elem}) 92a6b7db3Sskrll 102a6b7db3Sskrll Routines to manipulate queues built from doubly linked lists. The 112a6b7db3Sskrll @code{insque} routine inserts @var{elem} in the queue immediately 122a6b7db3Sskrll after @var{pred}. The @code{remque} routine removes @var{elem} from 132a6b7db3Sskrll its containing queue. These routines expect to be passed pointers to 142a6b7db3Sskrll structures which have as their first members a forward pointer and a 152a6b7db3Sskrll back pointer, like this prototype (although no prototype is provided): 162a6b7db3Sskrll 172a6b7db3Sskrll @example 182a6b7db3Sskrll struct qelem @{ 192a6b7db3Sskrll struct qelem *q_forw; 202a6b7db3Sskrll struct qelem *q_back; 212a6b7db3Sskrll char q_data[]; 222a6b7db3Sskrll @}; 232a6b7db3Sskrll @end example 242a6b7db3Sskrll 252a6b7db3Sskrll @end deftypefn 262a6b7db3Sskrll 272a6b7db3Sskrll */ 282a6b7db3Sskrll 292a6b7db3Sskrll 302a6b7db3Sskrll struct qelem { 312a6b7db3Sskrll struct qelem *q_forw; 322a6b7db3Sskrll struct qelem *q_back; 332a6b7db3Sskrll }; 342a6b7db3Sskrll 352a6b7db3Sskrll 362a6b7db3Sskrll void insque(struct qelem * elem,struct qelem * pred)372a6b7db3Sskrllinsque (struct qelem *elem, struct qelem *pred) 382a6b7db3Sskrll { 392a6b7db3Sskrll elem -> q_forw = pred -> q_forw; 402a6b7db3Sskrll pred -> q_forw -> q_back = elem; 412a6b7db3Sskrll elem -> q_back = pred; 422a6b7db3Sskrll pred -> q_forw = elem; 432a6b7db3Sskrll } 442a6b7db3Sskrll 452a6b7db3Sskrll 462a6b7db3Sskrll void remque(struct qelem * elem)472a6b7db3Sskrllremque (struct qelem *elem) 482a6b7db3Sskrll { 492a6b7db3Sskrll elem -> q_forw -> q_back = elem -> q_back; 502a6b7db3Sskrll elem -> q_back -> q_forw = elem -> q_forw; 512a6b7db3Sskrll } 52