xref: /openbsd-src/gnu/lib/libiberty/src/insque.c (revision 20fce977aadac3358da45d5027d7d19cdc03b0fe)
100bf4279Sespie /* insque(3C) routines
200bf4279Sespie    This file is in the public domain.  */
300bf4279Sespie 
400bf4279Sespie /*
500bf4279Sespie 
69588ddcfSespie @deftypefn Supplemental void insque (struct qelem *@var{elem}, struct qelem *@var{pred})
79588ddcfSespie @deftypefnx Supplemental void remque (struct qelem *@var{elem})
89588ddcfSespie 
99588ddcfSespie Routines to manipulate queues built from doubly linked lists.  The
109588ddcfSespie @code{insque} routine inserts @var{elem} in the queue immediately
119588ddcfSespie after @var{pred}.  The @code{remque} routine removes @var{elem} from
129588ddcfSespie its containing queue.  These routines expect to be passed pointers to
139588ddcfSespie structures which have as their first members a forward pointer and a
149588ddcfSespie back pointer, like this prototype (although no prototype is provided):
159588ddcfSespie 
169588ddcfSespie @example
179588ddcfSespie struct qelem @{
1800bf4279Sespie   struct qelem *q_forw;
1900bf4279Sespie   struct qelem *q_back;
2000bf4279Sespie   char q_data[];
219588ddcfSespie @};
229588ddcfSespie @end example
2300bf4279Sespie 
249588ddcfSespie @end deftypefn
2500bf4279Sespie 
2600bf4279Sespie */
2700bf4279Sespie 
2800bf4279Sespie 
2900bf4279Sespie struct qelem {
3000bf4279Sespie   struct qelem *q_forw;
3100bf4279Sespie   struct qelem *q_back;
3200bf4279Sespie };
3300bf4279Sespie 
3400bf4279Sespie 
3500bf4279Sespie void
insque(struct qelem * elem,struct qelem * pred)36*20fce977Smiod insque (struct qelem *elem, struct qelem *pred)
3700bf4279Sespie {
3800bf4279Sespie   elem -> q_forw = pred -> q_forw;
3900bf4279Sespie   pred -> q_forw -> q_back = elem;
4000bf4279Sespie   elem -> q_back = pred;
4100bf4279Sespie   pred -> q_forw = elem;
4200bf4279Sespie }
4300bf4279Sespie 
4400bf4279Sespie 
4500bf4279Sespie void
remque(struct qelem * elem)46*20fce977Smiod remque (struct qelem *elem)
4700bf4279Sespie {
4800bf4279Sespie   elem -> q_forw -> q_back = elem -> q_back;
4900bf4279Sespie   elem -> q_back -> q_forw = elem -> q_forw;
5000bf4279Sespie }
51