#ifndef MPLIB1_DL_LIST #define MPLIB1_DL_LIST /* ******************************************************************************* * Copyright (c) 1996 Martin Poole * ******************************************************************************* ** ** WARNING !! WARNING !! WARNING !! WARNING !! WARNING !! WARNING !! ** ** Any changes to be made to this file should first be checked with ** mplib1 source control for library integrity. ** ** mplib1 source control can be reached at mplib1@quatermass.co.uk ** * * $Source: /home/cvs/cvsroot/onelan/onelan/src/mplib1/mplib1/dl_list.h,v $ * $Author: mpoole $ * $Date: 2002/10/07 09:37:44 $ * $Revision: 1.2 $ * Purpose : Double-linked List/Node definitions * ******************************************************************************* * * Change History * * $Log: dl_list.h,v $ * Revision 1.2 2002/10/07 09:37:44 mpoole * Initial checkin of mplib1-3.1.0 * * Revision 1.1 2002/10/07 09:37:00 mpoole * Initial checkin of mplib1-3.1.0 * * ******************************************************************************* */ #ident "$Header: /home/cvs/cvsroot/onelan/onelan/src/mplib1/mplib1/dl_list.h,v 1.2 2002/10/07 09:37:44 mpoole Exp $" /* ------------------------------------------------------------------ defines ------------------------------------------------------------------ */ #ifndef BIT #define BIT(x) (1<<(x)) #endif /* ------------------------------------------------------------------ structures ------------------------------------------------------------------ */ #ifdef STRICT #define DL_NODE_TYPE dl_Node_s #define DL_LIST_TYPE dl_List_s #else #define DL_NODE_TYPE dl_Node #define DL_LIST_TYPE dl_List #endif struct DL_NODE_TYPE { struct DL_NODE_TYPE *ln_Succ; struct DL_NODE_TYPE *ln_Pred; char *ln_Name; void *ln_Item; struct DL_LIST_TYPE *ln_List; }; struct DL_LIST_TYPE { struct DL_NODE_TYPE ln_Head; struct DL_NODE_TYPE ln_Tail; int ln_Flags; #ifndef LN_IGNORECASE #define LN_IGNORECASE BIT(0) #endif }; typedef struct DL_NODE_TYPE dl_Node_t; typedef struct DL_LIST_TYPE dl_List_t; #define NODE_SIZE sizeof(dl_Node_t) #define LIST_SIZE sizeof(dl_List_t) #define DL_REMOVE_NODES BIT(0) #define DL_FREE_NODES BIT(1) #define DL_FREE_ITEMS BIT(2) #define DL_FREE_NAMES BIT(3) typedef void (* dl_Walk_List_t)( void *, void *); typedef int (* dl_Walk_List2_t)( void *, void *); typedef int (* dl_Walk_List_Name_t)( void *, void *); typedef int (* dl_Walk_List_Node_t)( dl_Node_t *, void *); typedef int (* dl_sort_i_t)( const void *, const void *); /* ------------------------------------------------------------------ function definitions ------------------------------------------------------------------ */ extern dl_List_t *dl_Init_List ( dl_List_t *list, int flags ); extern dl_Node_t *dl_Init_Node( dl_Node_t *node, char *name, void *item ); extern int dl_Any_In_List( dl_List_t *list ); extern dl_Node_t *dl_Remove_Node( dl_Node_t *node1 ); extern dl_Node_t *dl_Remove_Head( dl_List_t *list ); extern dl_Node_t *dl_Remove_Tail( dl_List_t *list ); extern dl_Node_t *dl_Add_Node_After( dl_Node_t *node1, dl_Node_t *node2 ); extern dl_Node_t *dl_Add_Node_Before( dl_Node_t *node1, dl_Node_t *node2 ); extern dl_Node_t *dl_Add_Head( dl_List_t *list, dl_Node_t *node ); extern dl_Node_t *dl_Add_Tail( dl_List_t *list, dl_Node_t *node ); extern void *dl_Find_Item_By_Name( dl_List_t *list, const char *name ); extern void *dl_Find_Next_Item_By_Name( dl_Node_t *node, const char *name ); extern dl_Node_t *dl_Find_Node_By_Item( dl_List_t *list, const void *item ); extern void * dl_Find_First_Item( dl_List_t *list ); extern void * dl_Find_Last_Item( dl_List_t *list ); extern void * dl_Find_Next_Item( dl_Node_t *node ); extern void * dl_Find_Prev_Item( dl_Node_t *node ); extern void * dl_Remove_Head_Item( dl_List_t *list ); extern void * dl_Remove_Tail_Item( dl_List_t *list ); extern int dl_Walk_List( dl_List_t *l_ptr, dl_Walk_List_t disp, void *param ); extern int dl_Walk_List2( dl_List_t *l_ptr, dl_Walk_List2_t disp, void *param ); extern int dl_Walk_List_Name( dl_List_t *l_ptr, const char *name, dl_Walk_List_Name_t disp, void *param ); extern int dl_Transfer_Lists( dl_List_t *fl_ptr, dl_List_t *tl_ptr ); extern int dl_Walk_List_By_Node( dl_List_t *l_ptr, dl_Walk_List_Node_t disp, void *param ); extern int dl_Free_List_Contents( dl_List_t *l_ptr ); extern void dl_Free_Node( dl_Node_t *n_ptr, int flags ); extern void dl_Free_List( dl_List_t *l_ptr, int flags ); extern int dl_sort_i( dl_List_t *sort_list, dl_sort_i_t compar ); /* int (*compar)(const void *, const void *) );*/ extern int dl_sort_n( dl_List_t *sort_list ); #endif /* -- End of File -- */