xref: /netbsd-src/external/gpl3/binutils/dist/libiberty/insque.c (revision 883529b6859962066edccc75471ffe4d419d3caa)
12a6b7db3Sskrll /* insque(3C) routines
22a6b7db3Sskrll    This file is in the public domain.  */
32a6b7db3Sskrll 
42a6b7db3Sskrll /*
52a6b7db3Sskrll 
6*883529b6Schristos @deftypefn Supplemental void insque (struct qelem *@var{elem}, @
7*883529b6Schristos   struct qelem *@var{pred})
82a6b7db3Sskrll @deftypefnx Supplemental void remque (struct qelem *@var{elem})
92a6b7db3Sskrll 
102a6b7db3Sskrll Routines to manipulate queues built from doubly linked lists.  The
112a6b7db3Sskrll @code{insque} routine inserts @var{elem} in the queue immediately
122a6b7db3Sskrll after @var{pred}.  The @code{remque} routine removes @var{elem} from
132a6b7db3Sskrll its containing queue.  These routines expect to be passed pointers to
142a6b7db3Sskrll structures which have as their first members a forward pointer and a
152a6b7db3Sskrll back pointer, like this prototype (although no prototype is provided):
162a6b7db3Sskrll 
172a6b7db3Sskrll @example
182a6b7db3Sskrll struct qelem @{
192a6b7db3Sskrll   struct qelem *q_forw;
202a6b7db3Sskrll   struct qelem *q_back;
212a6b7db3Sskrll   char q_data[];
222a6b7db3Sskrll @};
232a6b7db3Sskrll @end example
242a6b7db3Sskrll 
252a6b7db3Sskrll @end deftypefn
262a6b7db3Sskrll 
272a6b7db3Sskrll */
282a6b7db3Sskrll 
292a6b7db3Sskrll 
302a6b7db3Sskrll struct qelem {
312a6b7db3Sskrll   struct qelem *q_forw;
322a6b7db3Sskrll   struct qelem *q_back;
332a6b7db3Sskrll };
342a6b7db3Sskrll 
352a6b7db3Sskrll 
362a6b7db3Sskrll void
insque(struct qelem * elem,struct qelem * pred)372a6b7db3Sskrll insque (struct qelem *elem, struct qelem *pred)
382a6b7db3Sskrll {
392a6b7db3Sskrll   elem -> q_forw = pred -> q_forw;
402a6b7db3Sskrll   pred -> q_forw -> q_back = elem;
412a6b7db3Sskrll   elem -> q_back = pred;
422a6b7db3Sskrll   pred -> q_forw = elem;
432a6b7db3Sskrll }
442a6b7db3Sskrll 
452a6b7db3Sskrll 
462a6b7db3Sskrll void
remque(struct qelem * elem)472a6b7db3Sskrll remque (struct qelem *elem)
482a6b7db3Sskrll {
492a6b7db3Sskrll   elem -> q_forw -> q_back = elem -> q_back;
502a6b7db3Sskrll   elem -> q_back -> q_forw = elem -> q_forw;
512a6b7db3Sskrll }
52