xref: /netbsd-src/external/gpl3/gcc.old/dist/libiberty/insque.c (revision 1debfc3d3fad8af6f31804271c18e67f77b4d718)
1*1debfc3dSmrg /* insque(3C) routines
2*1debfc3dSmrg    This file is in the public domain.  */
3*1debfc3dSmrg 
4*1debfc3dSmrg /*
5*1debfc3dSmrg 
6*1debfc3dSmrg @deftypefn Supplemental void insque (struct qelem *@var{elem}, @
7*1debfc3dSmrg   struct qelem *@var{pred})
8*1debfc3dSmrg @deftypefnx Supplemental void remque (struct qelem *@var{elem})
9*1debfc3dSmrg 
10*1debfc3dSmrg Routines to manipulate queues built from doubly linked lists.  The
11*1debfc3dSmrg @code{insque} routine inserts @var{elem} in the queue immediately
12*1debfc3dSmrg after @var{pred}.  The @code{remque} routine removes @var{elem} from
13*1debfc3dSmrg its containing queue.  These routines expect to be passed pointers to
14*1debfc3dSmrg structures which have as their first members a forward pointer and a
15*1debfc3dSmrg back pointer, like this prototype (although no prototype is provided):
16*1debfc3dSmrg 
17*1debfc3dSmrg @example
18*1debfc3dSmrg struct qelem @{
19*1debfc3dSmrg   struct qelem *q_forw;
20*1debfc3dSmrg   struct qelem *q_back;
21*1debfc3dSmrg   char q_data[];
22*1debfc3dSmrg @};
23*1debfc3dSmrg @end example
24*1debfc3dSmrg 
25*1debfc3dSmrg @end deftypefn
26*1debfc3dSmrg 
27*1debfc3dSmrg */
28*1debfc3dSmrg 
29*1debfc3dSmrg 
30*1debfc3dSmrg struct qelem {
31*1debfc3dSmrg   struct qelem *q_forw;
32*1debfc3dSmrg   struct qelem *q_back;
33*1debfc3dSmrg };
34*1debfc3dSmrg 
35*1debfc3dSmrg 
36*1debfc3dSmrg void
insque(struct qelem * elem,struct qelem * pred)37*1debfc3dSmrg insque (struct qelem *elem, struct qelem *pred)
38*1debfc3dSmrg {
39*1debfc3dSmrg   elem -> q_forw = pred -> q_forw;
40*1debfc3dSmrg   pred -> q_forw -> q_back = elem;
41*1debfc3dSmrg   elem -> q_back = pred;
42*1debfc3dSmrg   pred -> q_forw = elem;
43*1debfc3dSmrg }
44*1debfc3dSmrg 
45*1debfc3dSmrg 
46*1debfc3dSmrg void
remque(struct qelem * elem)47*1debfc3dSmrg remque (struct qelem *elem)
48*1debfc3dSmrg {
49*1debfc3dSmrg   elem -> q_forw -> q_back = elem -> q_back;
50*1debfc3dSmrg   elem -> q_back -> q_forw = elem -> q_forw;
51*1debfc3dSmrg }
52