1178825Sdfr/* insque(3C) routines
2178825Sdfr   This file is in the public domain.  */
3178825Sdfr
4178825Sdfr/*
5178825Sdfr
6178825Sdfr@deftypefn Supplemental void insque (struct qelem *@var{elem}, struct qelem *@var{pred})
7178825Sdfr@deftypefnx Supplemental void remque (struct qelem *@var{elem})
8178825Sdfr
9178825SdfrRoutines to manipulate queues built from doubly linked lists.  The
10178825Sdfr@code{insque} routine inserts @var{elem} in the queue immediately
11178825Sdfrafter @var{pred}.  The @code{remque} routine removes @var{elem} from
12178825Sdfrits containing queue.  These routines expect to be passed pointers to
13178825Sdfrstructures which have as their first members a forward pointer and a
14178825Sdfrback pointer, like this prototype (although no prototype is provided):
15178825Sdfr
16178825Sdfr@example
17178825Sdfrstruct qelem @{
18178825Sdfr  struct qelem *q_forw;
19178825Sdfr  struct qelem *q_back;
20178825Sdfr  char q_data[];
21178825Sdfr@};
22178825Sdfr@end example
23178825Sdfr
24178825Sdfr@end deftypefn
25178825Sdfr
26178825Sdfr*/
27178825Sdfr
28178825Sdfr
29178825Sdfrstruct qelem {
30178825Sdfr  struct qelem *q_forw;
31178825Sdfr  struct qelem *q_back;
32178825Sdfr};
33178825Sdfr
34178825Sdfr
35178825Sdfrvoid
36178825Sdfrinsque (struct qelem *elem, struct qelem *pred)
37178825Sdfr{
38178825Sdfr  elem -> q_forw = pred -> q_forw;
39178825Sdfr  pred -> q_forw -> q_back = elem;
40178825Sdfr  elem -> q_back = pred;
41178825Sdfr  pred -> q_forw = elem;
42178825Sdfr}
43178825Sdfr
44178825Sdfr
45178825Sdfrvoid
46178825Sdfrremque (struct qelem *elem)
47178825Sdfr{
48178825Sdfr  elem -> q_forw -> q_back = elem -> q_back;
49178825Sdfr  elem -> q_back -> q_forw = elem -> q_forw;
50178825Sdfr}
51178825Sdfr