Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

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