#ifndef LISTS_H #define LISTS_H #include #include #define list_define_list_type(NAME,DATAFIELDTYPE,DATAFIELDNAME)\ struct NAME##_struct\ {\ DATAFIELDTYPE DATAFIELDNAME;\ struct NAME##_struct *list_next_item;\ };\ \ typedef struct NAME##_struct NAME #define list_new_item(TYPE,PTR)\ {\ (PTR) = (TYPE *) malloc(sizeof(TYPE));\ if (NULL == (PTR))\ fprintf(stderr, "Alert: Not enough memory!\n");\ else\ (PTR)->list_next_item = NULL;\ } #define list_add_element_at_head(TYPE, PTR, ADD_PTR)\ {\ (ADD_PTR)->list_next_item = (PTR);\ (PTR) = (ADD_PTR);\ } #define list_append(TYPE,PTR,APP_PTR)\ {\ TYPE * list_cursorcdghf;\ \ list_cursorcdghf = (PTR);\ if (list_cursorcdghf == NULL)\ {\ (PTR) = (APP_PTR);\ }\ else\ {\ while (NULL != (list_cursorcdghf->list_next_item))\ list_cursorcdghf = list_cursorcdghf->list_next_item;\ list_cursorcdghf->list_next_item = (APP_PTR);\ }\ } #define list_delete_next_item(TYPE, PTR)\ {\ TYPE * list_abcdefgtemp;\ \ if ((PTR) != NULL)\ {\ if ((PTR)->list_next_item != NULL)\ {\ list_abcdefgtemp = (PTR)->list_next_item->list_next_item;\ free((PTR)->list_next_item);\ (PTR)->list_next_item = NULL;\ (PTR)->list_next_item = list_abcdefgtemp;\ }\ }\ } #define list_delete_all_items(TYPE, PTR)\ {\ while (NULL != (PTR))\ {\ TYPE * temp;\ \ temp = (PTR);\ (PTR) = (PTR)->list_next_item;\ free(temp);\ temp = (TYPE *) NULL;\ }\ } #define list_get_next_item(TYPE, PTR)\ {\ if (NULL != (PTR))\ (PTR) = (PTR)->list_next_item;\ } #define list_print_length(TYPE, PTR)\ {\ TYPE * list_abcdcursor;\ int length = 0;\ \ list_abcdcursor = (PTR);\ while (list_abcdcursor != NULL)\ {\ length++;\ list_abcdcursor = list_abcdcursor->list_next_item;\ }\ printf("Length: %d\n", length);\ } #endif