1169695Skan/* insque(3C) routines 2169695Skan This file is in the public domain. */ 3169695Skan 4169695Skan/* 5169695Skan 6169695Skan@deftypefn Supplemental void insque (struct qelem *@var{elem}, struct qelem *@var{pred}) 7169695Skan@deftypefnx Supplemental void remque (struct qelem *@var{elem}) 8169695Skan 9169695SkanRoutines to manipulate queues built from doubly linked lists. The 10169695Skan@code{insque} routine inserts @var{elem} in the queue immediately 11169695Skanafter @var{pred}. The @code{remque} routine removes @var{elem} from 12169695Skanits containing queue. These routines expect to be passed pointers to 13169695Skanstructures which have as their first members a forward pointer and a 14169695Skanback pointer, like this prototype (although no prototype is provided): 15169695Skan 16169695Skan@example 17169695Skanstruct qelem @{ 18169695Skan struct qelem *q_forw; 19169695Skan struct qelem *q_back; 20169695Skan char q_data[]; 21169695Skan@}; 22169695Skan@end example 23169695Skan 24169695Skan@end deftypefn 25169695Skan 26169695Skan*/ 27169695Skan 28169695Skan 29169695Skanstruct qelem { 30169695Skan struct qelem *q_forw; 31169695Skan struct qelem *q_back; 32169695Skan}; 33169695Skan 34169695Skan 35169695Skanvoid 36169695Skaninsque (struct qelem *elem, struct qelem *pred) 37169695Skan{ 38169695Skan elem -> q_forw = pred -> q_forw; 39169695Skan pred -> q_forw -> q_back = elem; 40169695Skan elem -> q_back = pred; 41169695Skan pred -> q_forw = elem; 42169695Skan} 43169695Skan 44169695Skan 45169695Skanvoid 46169695Skanremque (struct qelem *elem) 47169695Skan{ 48169695Skan elem -> q_forw -> q_back = elem -> q_back; 49169695Skan elem -> q_back -> q_forw = elem -> q_forw; 50169695Skan} 51