14fee23f9Smrg /* insque(3C) routines 24fee23f9Smrg This file is in the public domain. */ 34fee23f9Smrg 44fee23f9Smrg /* 54fee23f9Smrg 6*48fb7bfaSmrg @deftypefn Supplemental void insque (struct qelem *@var{elem}, @ 7*48fb7bfaSmrg struct qelem *@var{pred}) 84fee23f9Smrg @deftypefnx Supplemental void remque (struct qelem *@var{elem}) 94fee23f9Smrg 104fee23f9Smrg Routines to manipulate queues built from doubly linked lists. The 114fee23f9Smrg @code{insque} routine inserts @var{elem} in the queue immediately 124fee23f9Smrg after @var{pred}. The @code{remque} routine removes @var{elem} from 134fee23f9Smrg its containing queue. These routines expect to be passed pointers to 144fee23f9Smrg structures which have as their first members a forward pointer and a 154fee23f9Smrg back pointer, like this prototype (although no prototype is provided): 164fee23f9Smrg 174fee23f9Smrg @example 184fee23f9Smrg struct qelem @{ 194fee23f9Smrg struct qelem *q_forw; 204fee23f9Smrg struct qelem *q_back; 214fee23f9Smrg char q_data[]; 224fee23f9Smrg @}; 234fee23f9Smrg @end example 244fee23f9Smrg 254fee23f9Smrg @end deftypefn 264fee23f9Smrg 274fee23f9Smrg */ 284fee23f9Smrg 294fee23f9Smrg 304fee23f9Smrg struct qelem { 314fee23f9Smrg struct qelem *q_forw; 324fee23f9Smrg struct qelem *q_back; 334fee23f9Smrg }; 344fee23f9Smrg 354fee23f9Smrg 364fee23f9Smrg void insque(struct qelem * elem,struct qelem * pred)374fee23f9Smrginsque (struct qelem *elem, struct qelem *pred) 384fee23f9Smrg { 394fee23f9Smrg elem -> q_forw = pred -> q_forw; 404fee23f9Smrg pred -> q_forw -> q_back = elem; 414fee23f9Smrg elem -> q_back = pred; 424fee23f9Smrg pred -> q_forw = elem; 434fee23f9Smrg } 444fee23f9Smrg 454fee23f9Smrg 464fee23f9Smrg void remque(struct qelem * elem)474fee23f9Smrgremque (struct qelem *elem) 484fee23f9Smrg { 494fee23f9Smrg elem -> q_forw -> q_back = elem -> q_back; 504fee23f9Smrg elem -> q_back -> q_forw = elem -> q_forw; 514fee23f9Smrg } 52