From 02e638eb51cfdf5156cb465771d7fbccec01066e Mon Sep 17 00:00:00 2001 From: jestin Date: Fri, 14 Jan 2000 15:13:48 +0000 Subject: Bon, je le remet, on m'a expliqué pourquoi c'est pas super d'enlever list.h. A suivre ? --- src/list.h | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 src/list.h (limited to 'src') diff --git a/src/list.h b/src/list.h new file mode 100644 index 0000000..4a6fe26 --- /dev/null +++ b/src/list.h @@ -0,0 +1,55 @@ +#define LIST_ITER( list, p, cond ) \ + p = list; \ + while ( p && (cond) ) p = p->next + +#define LIST_REMOVE( list, p ) \ + { \ + void *toRemove; \ + if ( list == p ) \ + { \ + list = p->next; \ + free(p);\ + } \ + else \ + {\ + toRemove = p;\ + LIST_ITER( list, p, ( p->next != toRemove ));\ + if ( p )\ + {\ + /* somme tricky swapping to use a untyped variable */\ + void *suiv; \ + void *prec = p;\ + p = toRemove;\ + suiv = p->next;\ + p = prec;\ + p->next = suiv;\ + free(toRemove);\ + }\ + } \ + } + +#define LIST_ADD(list, p ) \ + if ((p = malloc( sizeof( *p ))))\ + { \ + memset( p, 0 , sizeof( *p ));\ + p->next = list; \ + list = p; \ + } + +#define LIST_EACH( list, p ) \ + for ( p = list ; p ; p = p -> next ) + +#define LIST_EACH_SAFE( list, p, next )\ +for ( p = list ; (next = p ? p->next: p ),p ; p = next ) + + +#define LIST_EMPTY( list ) \ + { \ + void *p; \ + while( list ) \ + { \ + p = list;\ + list = list->next; \ + free(p);\ + } \ + } -- cgit v1.1