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