24 #ifndef _XENOMAI_VXWORKS_LSTLIB_H 25 #define _XENOMAI_VXWORKS_LSTLIB_H 27 #include <boilerplate/list.h> 28 #include <vxworks/types.h> 31 struct pvlistobj list;
40 static inline void lstInit(LIST *l)
42 pvlist_init(&l->list);
46 static inline void lstAdd(LIST *l, NODE *n)
48 pvholder_init(&n->link);
49 pvlist_append(&n->link, &l->list);
54 static inline int lstCount(LIST *l)
59 static inline void lstDelete(LIST *l, NODE *n)
61 pvlist_remove(&n->link);
66 static inline NODE *lstFirst(LIST *l)
68 if (l == NULL || pvlist_empty(&l->list))
71 return pvlist_first_entry(&l->list,
struct NODE, link);
74 static inline NODE *lstGet(LIST *l)
78 if (l == NULL || pvlist_empty(&l->list))
81 n = pvlist_pop_entry(&l->list,
struct NODE, link);
88 static inline void lstInsert(LIST *l, NODE *nprev, NODE *n)
90 pvholder_init(&n->link);
93 pvlist_prepend(&n->link, &l->list);
95 pvlist_insert(&n->link, &nprev->link);
101 static inline NODE *lstLast(LIST *l)
103 if (l == NULL || pvlist_empty(&l->list))
106 return pvlist_last_entry(&l->list,
struct NODE, link);
109 static inline NODE *lstNext(NODE *n)
111 if (n->list == NULL || &n->link == n->list->list.head.prev)
114 return container_of(n->link.next,
struct NODE, link);
117 static inline NODE *lstPrevious(NODE *n)
119 if (n->list == NULL || &n->link == n->list->list.head.next)
122 return container_of(n->link.prev,
struct NODE, link);
125 static inline void lstFree(LIST *l)
134 void lstExtract(LIST *lsrc, NODE *nstart, NODE *nend, LIST *ldst);
136 NODE *lstNth(LIST *l,
int nodenum);
138 NODE *lstNStep(NODE *n,
int steps);
140 int lstFind(LIST *l, NODE *n);
142 void lstConcat(LIST *ldst, LIST *lsrc);