ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/svn/ircd-hybrid/trunk/include/list.h
(Generate patch)

Comparing:
ircd-hybrid-7.2/include/list.h (file contents), Revision 34 by lusky, Sun Oct 2 21:05:51 2005 UTC vs.
ircd-hybrid/trunk/include/list.h (file contents), Revision 1592 by michael, Sat Oct 27 21:02:32 2012 UTC

# Line 25 | Line 25
25   #ifndef INCLUDED_list_h
26   #define INCLUDED_list_h
27  
28 + /* These macros are basically swiped from the linux kernel
29 + * they are simple yet effective
30 + */
31 +
32 + /*
33 + * Walks forward of a list.
34 + * pos is your node
35 + * head is your list head
36 + */
37 + #define DLINK_FOREACH(pos, head) for (pos = (head); pos != NULL; pos = pos->next)
38 +
39 + /*
40 + * Walks forward of a list safely while removing nodes
41 + * pos is your node
42 + * n is another list head for temporary storage
43 + * head is your list head
44 + */
45 + #define DLINK_FOREACH_SAFE(pos, n, head) for (pos = (head), n = pos ? pos->next : NULL; pos != NULL; pos = n, n = pos ? pos->next : NULL)
46 + #define DLINK_FOREACH_PREV(pos, head) for (pos = (head); pos != NULL; pos = pos->prev)
47 +
48 + /* Returns the list length */
49 + #define dlink_list_length(list) (list)->length
50 +
51 + /*
52 + * double-linked-list stuff
53 + */
54 + typedef struct _dlink_node dlink_node;
55 + typedef struct _dlink_list dlink_list;
56 +
57 + struct _dlink_node
58 + {
59 +  void *data;
60 +  dlink_node *prev;
61 +  dlink_node *next;
62 + };
63 +
64 + struct _dlink_list
65 + {
66 +  dlink_node *head;
67 +  dlink_node *tail;
68 +  unsigned int length;
69 + };
70 +
71 + extern void dlinkAdd(void *, dlink_node *, dlink_list *);
72 + extern void dlinkAddBefore(dlink_node *, void *, dlink_node *, dlink_list *);
73 + extern void dlinkAddTail(void *, dlink_node *, dlink_list *);
74 + extern void dlinkDelete(dlink_node *, dlink_list *);
75 + extern void dlinkMoveList(dlink_list *, dlink_list *);
76 + extern void dlink_move_node(dlink_node *, dlink_list *, dlink_list *);
77 + extern dlink_node *dlinkFind(dlink_list *, void *);
78 + extern dlink_node *dlinkFindDelete(dlink_list *, void *);
79 +
80   extern void init_dlink_nodes(void);
81   extern void free_dlink_node(dlink_node *);
82   extern dlink_node *make_dlink_node(void);
31 –
83   #endif

Diff Legend

– Removed lines
+ Added lines
< Changed lines (old)
> Changed lines (new)