xref: /netbsd-src/external/gpl3/gcc/dist/libiberty/insque.c (revision 48fb7bfab72acd4281a53bbee5ccf3f809019e75)
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)374fee23f9Smrg insque (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)474fee23f9Smrg remque (struct qelem *elem)
484fee23f9Smrg {
494fee23f9Smrg   elem -> q_forw -> q_back = elem -> q_back;
504fee23f9Smrg   elem -> q_back -> q_forw = elem -> q_forw;
514fee23f9Smrg }
52