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;
40static inline void lstInit(LIST *l)
42 pvlist_init(&l->list);
46static inline void lstAdd(LIST *l, NODE *n)
48 pvholder_init(&n->link);
49 pvlist_append(&n->link, &l->list);
54static inline int lstCount(LIST *l)
59static inline void lstDelete(LIST *l, NODE *n)
61 pvlist_remove(&n->link);
66static inline NODE *lstFirst(LIST *l)
68 if (l == NULL || pvlist_empty(&l->list))
71 return pvlist_first_entry(&l->list,
struct NODE, link);
74static inline NODE *lstGet(LIST *l)
78 if (l == NULL || pvlist_empty(&l->list))
81 n = pvlist_pop_entry(&l->list,
struct NODE, link);
88static 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);
101static inline NODE *lstLast(LIST *l)
103 if (l == NULL || pvlist_empty(&l->list))
106 return pvlist_last_entry(&l->list,
struct NODE, link);
109static 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);
117static 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);
125static inline void lstFree(LIST *l)
134void lstExtract(LIST *lsrc, NODE *nstart, NODE *nend, LIST *ldst);
136NODE *lstNth(LIST *l,
int nodenum);
138NODE *lstNStep(NODE *n,
int steps);
140int lstFind(LIST *l, NODE *n);
142void lstConcat(LIST *ldst, LIST *lsrc);