home *** CD-ROM | disk | FTP | other *** search
/ Aminet 18 / aminetcdnumber181997.iso / Aminet / text / hyper / hsc_source.lha / hsc / source / ugly / dllist.h < prev    next >
Encoding:
C/C++ Source or Header  |  1997-01-21  |  2.1 KB  |  82 lines

  1. #ifndef UGLY_DLLIST_H
  2. #define UGLY_DLLIST_H           /* avoid include twice */
  3.  
  4. /*
  5.  * dllist.h
  6.  *
  7.  * doubel linked list functions, header
  8.  *
  9.  * (W) by Tommy-Saftwörx in 1994,95
  10.  *
  11.  */
  12.  
  13. #include <stdio.h>
  14.  
  15. #include "utypes.h"
  16.  
  17. /*
  18.  *
  19.  * double linked list structs
  20.  *
  21.  */
  22. struct dlnode
  23. {
  24.     struct dlnode *prev;        /* previous entry */
  25.     struct dlnode *next;        /* next entry */
  26.     APTR data;                  /* ptr to data */
  27. };
  28.  
  29. struct dllist
  30. {                               /* PRIVATE (read-only) */
  31.     struct dlnode *first;       /*   first entry */
  32.     struct dlnode *last;        /*   last entry */
  33.     LONG entry_num;             /*   num of entris in list */
  34.     void (*del_data) (APTR data);       /*   func that removes data */
  35.     /* PUBLIC */
  36.     APTR user_data;             /*   user data */
  37. };
  38.  
  39. typedef struct dllist DLLIST;
  40. typedef struct dlnode DLNODE;
  41.  
  42. /*
  43.  * access methodes
  44.  */
  45. #define dll_first( list ) ((list)->first)
  46. #define dll_last( list )  ((list)->last)
  47. #define dln_prev( node )  ((node)->prev)
  48. #define dln_next( node )  ((node)->next)
  49. #define dln_data( node )  ((node)->data)
  50.  
  51. /*
  52.  *
  53.  * external functions prototypes
  54.  *
  55.  */
  56. #ifndef NOEXTERN_UGLY_DLLIST_H
  57.  
  58. extern DLLIST *init_dllist(void (*del_data) (APTR data));
  59. extern DLNODE *new_dlnode(void);
  60. extern DLNODE *ins_dlnode(DLLIST * list, DLNODE * node, APTR data);
  61. extern DLNODE *app_dlnode(DLLIST * list, APTR data);
  62.  
  63. extern APTR detach_dlnode(DLLIST * list, DLNODE * node);
  64. extern void del_dlnode(DLLIST * list, DLNODE * node);
  65. extern VOID del_all_dlnodes(DLLIST * list);
  66. extern void del_dllist(DLLIST * list);
  67.  
  68. extern BOOL empty_dllist(DLNODE * list);
  69.  
  70. extern void fprintf_dllist(FILE * stream, DLLIST * list,
  71.                            void (*fprintf_data) (FILE * stream, APTR data));
  72. extern void do_dllist(DLLIST * list, void (*func) (APTR data));
  73.  
  74. extern DLNODE *find_dlnode(DLNODE * start, APTR data,
  75.                            int (*compare) (APTR cmp_data, APTR list_data));
  76. extern DLNODE *find_dlnode_bw(DLNODE * start, APTR data,
  77.                             int (*compare) (APTR cmp_data, APTR list_data));
  78.  
  79. #endif /* NOEXTERN_UGLY_DLLIST_H */
  80.  
  81. #endif /* UGLY_DLLIST_H */
  82.