X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=mware%2Flist.h;h=e28abb43da95097c2e1bcfe03a3bf0021c6da908;hb=64969cdb6b48f50b642178779baf9e1e317e0645;hp=0fe471d031073ab7a7eed9c738f979ac23abd0dc;hpb=0ee1d8ff312b2b8fa07932cacc10d95ba3b23498;p=bertos.git diff --git a/mware/list.h b/mware/list.h index 0fe471d0..e28abb43 100755 --- a/mware/list.h +++ b/mware/list.h @@ -15,6 +15,15 @@ /*#* *#* $Log$ + *#* Revision 1.12 2005/01/22 04:21:32 bernie + *#* Add integrity checks. + *#* + *#* Revision 1.11 2004/12/31 16:44:11 bernie + *#* list_remHead(), list_remTail(): Name like normal functions. + *#* + *#* Revision 1.10 2004/11/28 23:21:05 bernie + *#* Remove obsolete INITLIST macro. + *#* *#* Revision 1.9 2004/10/21 09:37:55 bernie *#* Revamp documentation. *#* @@ -47,6 +56,8 @@ #ifndef MWARE_LIST_H #define MWARE_LIST_H +#include // INLINE + /*! * This structure represents a node for bidirectional lists. * @@ -110,8 +121,25 @@ typedef struct _List (l)->tail = (Node *)(&(l)->head); \ } while (0) -/* OBSOLETE */ -#define INITLIST(l) LIST_INIT(l) +/* Make sure that a list is valid (it was initialized and is not corrupted) */ +#ifdef _DEBUG + #define LIST_ASSERT_VALID(l) \ + do { \ + Node *n, *pred; \ + ASSERT((l)->head != NULL); \ + ASSERT((l)->null == NULL); \ + ASSERT((l)->tail != NULL); \ + pred = (Node *)(&(l)->head); \ + FOREACHNODE(n, l) \ + { \ + ASSERT(n->pred == pred); \ + pred = n; \ + } \ + ASSERT(n == (Node *)(&(l)->null)); \ + } while (0) +#else + #define LIST_ASSERT_VALID(l) do {} while (0) +#endif /*! Add node to list head. */ #define ADDHEAD(l,n) \ @@ -165,7 +193,7 @@ typedef struct _List * * \return Pointer to node, or NULL if the list was empty. */ -INLINE Node *REMHEAD(List *l) +INLINE Node *list_remHead(List *l) { Node *n; @@ -183,7 +211,7 @@ INLINE Node *REMHEAD(List *l) * * \return Pointer to node, or NULL if the list was empty. */ -INLINE Node *REMTAIL(List *l) +INLINE Node *list_remTail(List *l) { Node *n; @@ -196,4 +224,8 @@ INLINE Node *REMTAIL(List *l) return n; } +/* OBSOLETE names */ +#define REMHEAD list_remHead +#define REMTAIL list_remTail + #endif /* MWARE_LIST_H */