12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- /* insque(3C) routines
- This file is in the public domain. */
- /*
- @deftypefn Supplemental void insque (struct qelem *@var{elem}, @
- struct qelem *@var{pred})
- @deftypefnx Supplemental void remque (struct qelem *@var{elem})
- Routines to manipulate queues built from doubly linked lists. The
- @code{insque} routine inserts @var{elem} in the queue immediately
- after @var{pred}. The @code{remque} routine removes @var{elem} from
- its containing queue. These routines expect to be passed pointers to
- structures which have as their first members a forward pointer and a
- back pointer, like this prototype (although no prototype is provided):
- @example
- struct qelem @{
- struct qelem *q_forw;
- struct qelem *q_back;
- char q_data[];
- @};
- @end example
- @end deftypefn
- */
- struct qelem {
- struct qelem *q_forw;
- struct qelem *q_back;
- };
- void
- insque (struct qelem *elem, struct qelem *pred)
- {
- elem -> q_forw = pred -> q_forw;
- pred -> q_forw -> q_back = elem;
- elem -> q_back = pred;
- pred -> q_forw = elem;
- }
- void
- remque (struct qelem *elem)
- {
- elem -> q_forw -> q_back = elem -> q_back;
- elem -> q_back -> q_forw = elem -> q_forw;
- }
|