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

Fonctions de gestion de liste. Plus de détails...

#include "gl4dummies.h"
#include <stdlib.h>
Graphe des dépendances par inclusion de 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  _list_t
 
struct  list_t
 Liste chaînée dynamique. Plus de détails...
 

Définitions de type

typedef struct list_t list_t
 

Fonctions

GL4DAPI list_t GL4DAPIENTRY list_new (size_t data_size)
 Créé une nouvelle liste. Plus de détails...
 
GL4DAPI void GL4DAPIENTRY list_delete (list_t list)
 Détruit une liste. Plus de détails...
 
GL4DAPI void GL4DAPIENTRY list_insert (list_t *list, void *el, size_t index)
 Insère un élément dans une liste. Plus de détails...
 
GL4DAPI void GL4DAPIENTRY list_erase (list_t *list, size_t index)
 Supprime un élément d’une liste. Plus de détails...
 
GL4DAPI void GL4DAPIENTRY list_set (list_t list, void *el, size_t index)
 Modifie un élément dans une liste. Plus de détails...
 
GL4DAPI void *GL4DAPIENTRY list_get (list_t list, size_t index)
 Retourne un pointeur vers un élément d’une liste. Plus de détails...
 

Description détaillée

Fonctions de gestion de liste.

Auteur
Kevin HAVRANEK mzart.nosp@m.ek@h.nosp@m.otmai.nosp@m.l.fr
Date
Mars 17, 2015

Définition dans le fichier list.h.

Documentation des définitions de type

◆ list_t

typedef struct list_t list_t

Documentation des fonctions

◆ list_delete()

GL4DAPI void GL4DAPIENTRY list_delete ( list_t  list)

Détruit une liste.

Supprime chaque élément de la liste list avant de détruire la liste elle-même.
Attention ! Si les éléments stockés doivent être détruits via un destructeur spécial, ce dernier ne sera pas exécuté lors de l’appel de cette fonction !

Paramètres
list
43  {
44  struct _list_t *current, *next;
45 
46  for (current = list.begin; current != NULL; current = next) {
47  next = current->next;
48  free(current->data);
49  free(current);
50  }
51 }

Références list_t::begin, _list_t::data, et _list_t::next.

◆ list_erase()

GL4DAPI void GL4DAPIENTRY list_erase ( list_t list,
size_t  index 
)

Supprime un élément d’une liste.

Supprime un élément de la liste list situé à l’index index. Chaque élément suivant l’élément supprimé verra donc son index décrémenté de 1.
Attention ! Si les éléments stockés doivent être détruits via un destructeur spécial, ce dernier ne sera pas exécuté lors de l’appel de cette fonction !

Paramètres
listListe dans laquelle l’élément doit être détruit
indexIndex de l’élément devant être détruit
117  {
118  struct _list_t *current, *prev;
119  size_t i;
120 
121  assert(index < list->size);
122 
123  list->size--;
124 
125  prev = NULL;
126  current = list->begin;
127  for (i = 0; i < index; i++) {
128  prev = current;
129  current = current->next;
130  }
131 
132  if (prev != NULL)
133  prev->next = current->next;
134  else
135  list->begin = current->next;
136 
137  free(current->data);
138  free(current);
139 }

Références list_t::begin, _list_t::data, _list_t::next, et list_t::size.

◆ list_get()

GL4DAPI void* GL4DAPIENTRY list_get ( list_t  list,
size_t  index 
)

Retourne un pointeur vers un élément d’une liste.

Retourne un pointeur vers un élément d’une liste.

Cette fonction renvoie un pointeur vers l’élément situé à l’index index dans la liste list.

Paramètres
listListe contenant l’élément souhaité
indexIndex de l’élément souhaité
Renvoie
Renvoie un pointeur vers l’élément d’index index
175  {
176  struct _list_t *current;
177  size_t i;
178 
179  assert(index < list.size);
180 
181  current = list.begin;
182  for (i = 0; i < index; i++) {
183  current = current->next;
184  }
185 
186  return current->data;
187 }

Références list_t::begin, _list_t::data, _list_t::next, et list_t::size.

◆ list_insert()

GL4DAPI void GL4DAPIENTRY list_insert ( list_t list,
void *  el,
size_t  index 
)

Insère un élément dans une liste.

Insère un nouvel élément el dans la liste list à l’index index, avant l’élément se trouvant précédemment à ce même index (ce dernier et les éléments suivant subissant alors un décalage d’un rang). L’élément el est copié dans une nouvelle cellule de la liste, et l’élément el passé en paramètre et l’élément dans la liste à la fin de l’exécution de cette fonction ne sont donc pas le même objet.

Paramètres
listListe dans laquelle est insérée le nouvel élément
elNouvel élément à insérer
indexIndex auquel insérer le nouvel élément
65  {
66  struct _list_t *current, *prev, *new_ptr;
67  size_t i;
68 
69  list->size = (index < list->size) ? (list->size + 1) : (index + 1);
70 
71  prev = NULL;
72  current = list->begin;
73  for (i = 0; i < index; i++) {
74  if (current->next == NULL) {
75  current->next = malloc(sizeof *current->next);
76  assert(current->next);
77 
78  current->next->data = malloc(list->data_size);
79  assert(current->next->data);
80 
81  current->next->next = NULL;
82 
83  }
84 
85  prev = current;
86  current = current->next;
87  }
88 
89  new_ptr = malloc(sizeof *new_ptr);
90  assert(new_ptr);
91 
92  new_ptr->data = malloc(list->data_size);
93  assert(new_ptr->data);
94 
95 
96  memcpy(new_ptr->data, el, list->data_size);
97 
98  if (prev != NULL) {
99  prev->next = new_ptr;
100  } else {
101  list->begin = new_ptr;
102  }
103 
104  new_ptr->next = current;
105 }

Références list_t::begin, _list_t::data, list_t::data_size, _list_t::next, et list_t::size.

◆ list_new()

GL4DAPI list_t GL4DAPIENTRY list_new ( size_t  data_size)

Créé une nouvelle liste.

Créé une liste vide d’éléments de taille data_size et renvoie un pointeur sur ladite liste

Paramètres
data_size
Renvoie
Retourne un pointeur sur la liste créée
18  {
19  list_t list;
20 
21  list.begin = malloc(sizeof *list.begin);
22  assert(list.begin);
23 
24  list.size = 0;
25  list.data_size = data_size;
26  list.begin->data = malloc(data_size);
27  assert(list.begin->data);
28 
29  list.begin->next = NULL;
30 
31 
32  return list;
33 }

Références list_t::begin, _list_t::data, list_t::data_size, _list_t::next, et list_t::size.

◆ list_set()

GL4DAPI void GL4DAPIENTRY list_set ( list_t  list,
void *  el,
size_t  index 
)

Modifie un élément dans une liste.

Cette fonction remplace la valeur de l’élément de la liste list situé à l’index index par la valeur de l’élément el qui sera copié.
Attention ! Si l’élément précédent doit être détruit via un destructeur spécial, ce dernier ne sera pas exécuté via cette fonction !

Paramètres
listListe dans laquelle l’élément doit être modifié
elÉlément dont les valeurs seront copiées
indexIndex de l’élément à modifier
151  {
152  struct _list_t *current;
153  size_t i;
154 
155  assert(index < list.size);
156 
157  current = list.begin;
158  for (i = 0; i < index; i++) {
159  current = current->next;
160  }
161 
162  memcpy(current->data, el, list.data_size);
163 }

Références list_t::begin, _list_t::data, list_t::data_size, _list_t::next, et list_t::size.

list_t::data_size
size_t data_size
Definition: list.h:45
_list_t
Definition: list.h:31
list_t
Liste chaînée dynamique.
Definition: list.h:42
list_t::begin
struct _list_t * begin
Definition: list.h:43
_list_t::next
struct _list_t * next
Definition: list.h:33
list_t::size
size_t size
Definition: list.h:44
_list_t::data
void * data
Definition: list.h:32