libmove3d  3.13.0
/home/slemaign/softs-local/BioMove3D-git/include/dyna_list.h
Go to the documentation of this file.
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 */
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Defines