180183Sjkh/* insque(3C) routines 280183Sjkh This file is in the public domain. */ 380183Sjkh 480183Sjkh/* 580183Sjkh 680183Sjkh@deftypefn Supplemental void insque (struct qelem *@var{elem}, @ 780183Sjkh struct qelem *@var{pred}) 880183Sjkh@deftypefnx Supplemental void remque (struct qelem *@var{elem}) 980183Sjkh 1080183SjkhRoutines to manipulate queues built from doubly linked lists. The 1180183Sjkh@code{insque} routine inserts @var{elem} in the queue immediately 1280183Sjkhafter @var{pred}. The @code{remque} routine removes @var{elem} from 1380183Sjkhits containing queue. These routines expect to be passed pointers to 1480183Sjkhstructures which have as their first members a forward pointer and a 1580183Sjkhback pointer, like this prototype (although no prototype is provided): 1680183Sjkh 1780183Sjkh@example 1880183Sjkhstruct qelem @{ 1980183Sjkh struct qelem *q_forw; 2080183Sjkh struct qelem *q_back; 2180183Sjkh char q_data[]; 2280183Sjkh@}; 2380183Sjkh@end example 2480183Sjkh 2580183Sjkh@end deftypefn 2680183Sjkh 2780183Sjkh*/ 28221466Snwhitehorn 29264995Snwhitehorn 30264995Snwhitehornstruct qelem { 31294980Ssmh struct qelem *q_forw; 32264995Snwhitehorn struct qelem *q_back; 33264995Snwhitehorn}; 34264995Snwhitehorn 35264995Snwhitehorn 36264995Snwhitehornvoid 37264995Snwhitehorninsque (struct qelem *elem, struct qelem *pred) 38264995Snwhitehorn{ 39264995Snwhitehorn elem -> q_forw = pred -> q_forw; 40264995Snwhitehorn pred -> q_forw -> q_back = elem; 41264995Snwhitehorn elem -> q_back = pred; 42264995Snwhitehorn pred -> q_forw = elem; 4380183Sjkh} 4480183Sjkh 4580183Sjkh 4680183Sjkhvoid 4780183Sjkhremque (struct qelem *elem) 4880183Sjkh{ 4980183Sjkh elem -> q_forw -> q_back = elem -> q_back; 5080183Sjkh elem -> q_back -> q_forw = elem -> q_forw; 5180183Sjkh} 5280183Sjkh