GL4Dummies  0.1.7
Référence du fichier linked_list.h

Fonctions de gestion de listes chainees. Plus de détails...

#include "gl4dummies.h"
Graphe des dépendances par inclusion de linked_list.h:
Ce graphe montre quels fichiers incluent directement ou indirectement ce fichier :

Aller au code source de ce fichier.

Structures de données

struct  pair_t
 
struct  llnode_t
 
struct  linked_list_t
 

Macros

#define STRUCT_PAIR_T
 

Définitions de type

typedef struct llnode_t llnode_t
 
typedef struct linked_list_t linked_list_t
 
typedef struct pair_t pair_t
 

Fonctions

GL4DAPI linked_list_t *GL4DAPIENTRY llNew (void)
 
GL4DAPI void GL4DAPIENTRY llPushBack (linked_list_t *ll, void *data)
 
GL4DAPI void GL4DAPIENTRY llPush (linked_list_t *ll, void *data)
 
GL4DAPI void *GL4DAPIENTRY llPop (linked_list_t *ll)
 
GL4DAPI int GL4DAPIENTRY llEmpty (linked_list_t *ll)
 
GL4DAPI pair_t GL4DAPIENTRY llInsert (linked_list_t *ll, void *data, int(*compar)(const void *newData, const void *nodeData))
 
GL4DAPI void GL4DAPIENTRY llInsertAt (llnode_t **here, void *data)
 
GL4DAPI pair_t GL4DAPIENTRY llFind (linked_list_t *ll, const void *data, int(*compar)(const void *newData, const void *nodeData))
 
GL4DAPI void GL4DAPIENTRY llDelete (linked_list_t *ll, llnode_t **node, void(__cdecl *freeData)(void *))
 
GL4DAPI llnode_t **GL4DAPIENTRY llNext (llnode_t **node)
 
GL4DAPI llnode_t **GL4DAPIENTRY llFirst (linked_list_t *ll)
 
GL4DAPI llnode_t **GL4DAPIENTRY llEnd (linked_list_t *ll)
 
GL4DAPI void GL4DAPIENTRY llFree (linked_list_t *ll, void(*freeData)(void *))
 

Description détaillée

Fonctions de gestion de listes chainees.

Auteur
Fares BELHADJ amsi@.nosp@m.ai.u.nosp@m.niv-p.nosp@m.aris.nosp@m.8.fr
Date
January 16, 2006 - June 02, 2010 - February 22, 2016

Définition dans le fichier linked_list.h.

Documentation des macros

◆ STRUCT_PAIR_T

#define STRUCT_PAIR_T

Documentation des définitions de type

◆ linked_list_t

typedef struct linked_list_t linked_list_t

◆ llnode_t

typedef struct llnode_t llnode_t

◆ pair_t

typedef struct pair_t pair_t

Documentation des fonctions

◆ llDelete()

GL4DAPI void GL4DAPIENTRY llDelete ( linked_list_t ll,
llnode_t **  node,
void(__cdecl *freeData)(void *)   
)

◆ llEmpty()

GL4DAPI int GL4DAPIENTRY llEmpty ( linked_list_t ll)
44  {
45  return ll->tail == &(ll->head);
46 }

Références linked_list_t::head, et linked_list_t::tail.

Référencé par genId(), et gl4duClean().

◆ llEnd()

92  {
93  return ll->tail;
94 }

Références linked_list_t::tail.

◆ llFind()

GL4DAPI pair_t GL4DAPIENTRY llFind ( linked_list_t ll,
const void *  data,
int(*)(const void *newData, const void *nodeData)  compar 
)
63  {
64  pair_t res = {(void **)&(ll->head), -1};
65  while(*(llnode_t **)res.ptr) {
66  if((res.compResult = compar(data, (*(llnode_t **)res.ptr)->data)) <= 0)
67  return res;
68  else
69  res.ptr = (void **)&((*(llnode_t **)res.ptr)->next);
70  }
71  return res;
72 }

Références pair_t::compResult, linked_list_t::head, et pair_t::ptr.

Référencé par llInsert().

◆ llFirst()

88  {
89  return &(ll->head);
90 }

Références linked_list_t::head.

◆ llFree()

GL4DAPI void GL4DAPIENTRY llFree ( linked_list_t ll,
void(*)(void *)  freeData 
)
96  {
97  llnode_t * ptr = ll->head, * next;
98  if(freeData)
99  while(ptr) {
100  next = ptr->next;
101  freeData(ptr->data);
102  free(ptr);
103  ptr = next;
104  }
105  else
106  while(ptr) {
107  next = ptr->next;
108  free(ptr);
109  ptr = next;
110  }
111  free(ll);
112 }

Références llnode_t::data, linked_list_t::head, et llnode_t::next.

◆ llInsert()

GL4DAPI pair_t GL4DAPIENTRY llInsert ( linked_list_t ll,
void *  data,
int(*)(const void *newData, const void *nodeData)  compar 
)
48  {
49  pair_t res = llFind(ll, data, compar);
50  if(res.compResult)
51  llInsertAt((llnode_t **)res.ptr, data);
52  return res;
53 }

Références pair_t::compResult, llFind(), llInsertAt(), et pair_t::ptr.

◆ llInsertAt()

GL4DAPI void GL4DAPIENTRY llInsertAt ( llnode_t **  here,
void *  data 
)
55  {
56  llnode_t * next = *here;
57  *here = malloc(sizeof ** here);
58  assert(*here);
59  (*here)->data = data;
60  (*here)->next = next;
61 }

Référencé par llInsert().

◆ llNew()

GL4DAPI linked_list_t* GL4DAPIENTRY llNew ( void  )
12  {
13  linked_list_t * ll = malloc(sizeof * ll);
14  assert(ll);
15  ll->head = NULL;
16  ll->tail = &(ll->head);
17  return ll;
18 }

Références linked_list_t::head, et linked_list_t::tail.

Référencé par gl4dgInit(), et gl4duAtExit().

◆ llNext()

GL4DAPI llnode_t** GL4DAPIENTRY llNext ( llnode_t **  node)
84  {
85  return &((*node)->next);
86 }

◆ llPop()

GL4DAPI void* GL4DAPIENTRY llPop ( linked_list_t ll)
38  {
39  void * data = ll->head->data;
40  llDelete(ll, &(ll->head), NULL);
41  return data;
42 }

Références llnode_t::data, linked_list_t::head, et llDelete().

Référencé par genId(), et gl4duClean().

◆ llPush()

GL4DAPI void GL4DAPIENTRY llPush ( linked_list_t ll,
void *  data 
)
28  {
29  llnode_t * next = ll->head;
30  ll->head = malloc(sizeof * ll->head);
31  assert(ll->head);
32  ll->head->data = data;
33  ll->head->next = next;
34  if(!next)
35  ll->tail = &(ll->head->next);
36 }

Références llnode_t::data, linked_list_t::head, llnode_t::next, et linked_list_t::tail.

Référencé par genId(), gl4dgDelete(), gl4dgInit(), et gl4duAtExit().

◆ llPushBack()

GL4DAPI void GL4DAPIENTRY llPushBack ( linked_list_t ll,
void *  data 
)
20  {
21  *(ll->tail) = malloc(sizeof ** (ll->tail));
22  assert(*(ll->tail));
23  (*(ll->tail))->data = data;
24  (*(ll->tail))->next = NULL;
25  ll->tail = &((*(ll->tail))->next);
26 }

Références linked_list_t::tail.

linked_list_t::head
struct llnode_t * head
Definition: linked_list.h:35
pair_t::ptr
void ** ptr
Definition: bin_tree.h:23
linked_list_t
Definition: linked_list.h:34
linked_list_t::tail
struct llnode_t ** tail
Definition: linked_list.h:36
llInsertAt
void llInsertAt(llnode_t **here, void *data)
Definition: linked_list.c:55
pair_t
Definition: bin_tree.h:22
pair_t::compResult
int compResult
Definition: bin_tree.h:24
llnode_t
Definition: linked_list.h:29
llnode_t::next
struct llnode_t * next
Definition: linked_list.h:31
llnode_t::data
void * data
Definition: linked_list.h:30
llFind
pair_t llFind(linked_list_t *ll, const void *data, int(*compar)(const void *newData, const void *nodeData))
Definition: linked_list.c:63
llDelete
void llDelete(linked_list_t *ll, llnode_t **node, void(*freeData)(void *))
Definition: linked_list.c:74