libmove3d
3.13.0
|
00001 /***************************************************************************/ 00006 /***************************************************************************/ 00007 00008 00009 #ifndef dyna_list_h 00010 #define dyna_list_h 00011 00014 typedef enum { 00015 DBL_OK, 00016 DBL_EMPTY, 00017 DBL_NOT_VALIDE_CURRENT_POSITION, 00018 DBL_STACK_ERROR, 00019 DBL_MEMORY_ERROR, 00020 DBL_NULL_LIST, 00021 DBL_NOT_MATCHING_LIST 00022 } dbl_list_state; 00023 00024 typedef void *(*dbl_clone_function)(void*); 00025 typedef void (*dbl_destroy_function)(void*); 00026 typedef int (*dbl_equal_function)(void*, void*); 00027 00028 00029 00032 typedef struct s_dbl_list_node { 00033 void *data; 00034 struct s_dbl_list_node *next, *prev; 00035 } dbl_list_node; 00036 00037 00040 typedef struct s_dbl_list { 00041 dbl_list_node *first, *last, *current; 00042 dbl_list_node **stack; 00043 int * stack_indice; 00044 int nb_node; 00045 int cur_node; 00046 dbl_clone_function clone; 00047 dbl_destroy_function destroy; 00048 dbl_list_state state; 00049 size_t size; 00050 int sp_modif; 00051 int sp; 00052 int sp_l; 00053 } dbl_list; 00054 00055 #define DBL_LIST_FIRST(type, L) ((type *)(((L)->first)?((L)->first->data):NULL)) 00056 #define DBL_LIST_LAST(type, L) ((type *)(((L)->last)?((L)->last->data):NULL)) 00057 #define DBL_LIST_NEXT(type, L) ((type *)(((L)->current)?(((L)->current->next)?((L)->current->next->data):NULL):NULL)) 00058 #define DBL_LIST_PREV(type, L) ((type *)(((L)->current)?(((L)->current->prev)?((L)->current->prev->data):NULL):NULL)) 00059 #define DBL_LIST_DATA(type, L) ((type *)(((L)->current)?((L)->current->data):NULL)) 00060 #define DBL_LIST_DATA_N(type, L, num) ((type *)(dbl_list_get_data_n(L, num))) 00061 00062 /* Macro d'accès à : dbl_list * dbl_list_init(void *(*dbl_clone_func)(void*), 00063 * void (*dbl_destroy_func)(void*),size_t size) 00064 */ 00065 #define DBL_LIST_INIT(copy, del, type) (dbl_list_init((dbl_clone_function)(copy), (dbl_destroy_function)(del), sizeof(type))) 00066 00067 /* Macro d'accès à : dbl_list * dbl_list_find_by_data(dbl_list * listPt, 00068 * void * data, int (*dbl_equal_function)(void*,void*)) 00069 */ 00070 #define DBL_LIST_FIND(L, data, fct) ((dbl_list_find_by_data((L), (data), (dbl_equal_function)(fct))) != NULL) 00071 00072 #endif /* dyna_list_h */