SysIo  1.9.0
Embedded Library and tools
dlist.h
1 
10 #ifndef _SYSIO_DLIST_H_
11 #define _SYSIO_DLIST_H_
12 #include <stdlib.h>
13 #include <sysio/defs.h>
14 
15 #ifdef __cplusplus
16  extern "C" {
17 #endif
18 /* ========================================================================== */
19 typedef struct xDListElmt xDListElmt;
20 
28 /* types ==================================================================== */
32 typedef void (*vDListElmtDestroy) (void *data);
33 
38 typedef int (*iDListElmtMatch) (const void *key1, const void *key2);
39 
43 typedef const void * (*pvDListElmtKey) (const xDListElmt * element);
44 
45 /* structures =============================================================== */
46 
50 typedef struct xDListElmt {
51 
52  void *data;
53  struct xDListElmt *prev;
54  struct xDListElmt *next;
55 
56 } xDListElmt;
57 
61 typedef struct xDList {
62 
63  int size;
64  xDListElmt *head;
65  xDListElmt *tail;
66  vDListElmtDestroy destroy;
67  pvDListElmtKey key;
68  iDListElmtMatch match;
69 } xDList;
70 
71 /* macros =================================================================== */
75 #define pxDListElmtDataPtr(element, t) ((t *)pvDListElmtData(element))
76 
77 /* internal public functions ================================================ */
84 int iDListInit (xDList *list, vDListElmtDestroy fdestroy);
85 
92 int iDListInitSearch (xDList *list, pvDListElmtKey fkey, iDListElmtMatch fmatch);
93 
101 int iDListDestroy (xDList *list);
102 
110 int iDListInsertAfter (xDList *list, xDListElmt *element, const void *data);
111 
119 int iDListInsertBefore (xDList *list, xDListElmt *element, const void *data);
120 
128 int iDListRemove (xDList *list, xDListElmt *element, void **data);
129 
136 xDListElmt * pxDListFindFirst (xDList *list, const void * key);
137 
143 int iDListSize (const xDList *list);
144 
151 int iDListPrepend (xDList *list,const void *data);
152 
159 int iDListAppend (xDList *list,const void *data);
160 
166 xDListElmt * pxDListHead (const xDList *list);
167 
173 xDListElmt * pxDListTail (const xDList *list);
174 
180 bool bDListElmtIsHead (const xDListElmt *element);
181 
187 bool bDListElmtIsTail (const xDListElmt *element);
188 
194 void * pvDListElmtData (const xDListElmt *element);
195 
201 xDListElmt * pxDListElmtNext (const xDListElmt *element);
202 
208 xDListElmt * pxDListElmtPrev (const xDListElmt *element);
209 
214 /* ========================================================================== */
215 #ifdef __cplusplus
216  }
217 #endif
218 #endif /* _SYSIO_DLIST_H_ */
int iDListRemove(xDList *list, xDListElmt *element, void **data)
Retire un élément.
int(* iDListElmtMatch)(const void *key1, const void *key2)
Fonction de comparaison de 2 clés.
Definition: dlist.h:38
int iDListAppend(xDList *list, const void *data)
Insertion en fin de liste.
Liste doublement chaînée.
Definition: dlist.h:61
xDListElmt * pxDListElmtNext(const xDListElmt *element)
Pointeur sur l&#39;élément suivant dans la liste.
Elément d&#39;une liste doublement chaînée.
Definition: dlist.h:50
bool bDListElmtIsTail(const xDListElmt *element)
Indique si l&#39;élément est en queue de liste.
int iDListDestroy(xDList *list)
Destruction d&#39;une liste doublement chaînée.
struct xDListElmt xDListElmt
Elément d&#39;une liste doublement chaînée.
Definition: dlist.h:19
int iDListInit(xDList *list, vDListElmtDestroy fdestroy)
Initialise une liste doublement chaînée.
xDListElmt * pxDListTail(const xDList *list)
Retourne l&#39;élément en queue de liste.
int iDListInitSearch(xDList *list, pvDListElmtKey fkey, iDListElmtMatch fmatch)
Initialise les fonctions de recherche.
int iDListPrepend(xDList *list, const void *data)
Insertion en début de liste.
xDListElmt * pxDListFindFirst(xDList *list, const void *key)
Chercher le premier élément correspondant à une clé
void(* vDListElmtDestroy)(void *data)
Fonction qui libère la mémoire allouée à une donnée de la liste.
Definition: dlist.h:32
xDListElmt * pxDListHead(const xDList *list)
Retourne l&#39;élément en tête de liste.
int iDListInsertAfter(xDList *list, xDListElmt *element, const void *data)
Insertion avant l&#39;élément.
bool bDListElmtIsHead(const xDListElmt *element)
Indique si l&#39;élément est en tête de liste.
int iDListSize(const xDList *list)
Nombre d&#39;élément.
struct xDList xDList
Liste doublement chaînée.
void * pvDListElmtData(const xDListElmt *element)
Pointeur sur la donnée de l&#39;élément.
int iDListInsertBefore(xDList *list, xDListElmt *element, const void *data)
Insertion après l&#39;élément.
xDListElmt * pxDListElmtPrev(const xDListElmt *element)
Pointeur sur l&#39;élément précédent dans la liste.
const void *(* pvDListElmtKey)(const xDListElmt *element)
Retourne la clé d&#39;un élément.
Definition: dlist.h:43