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