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

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

#include "list.h"
#include <string.h>
#include <assert.h>
Graphe des dépendances par inclusion de list.c:

Aller au code source de ce fichier.

Fonctions

list_t list_new (size_t data_size)
 Créé une nouvelle liste. Plus de détails...
 
void list_delete (list_t list)
 Détruit une liste. Plus de détails...
 
void list_insert (list_t *list, void *el, size_t index)
 Insère un élément dans une liste. Plus de détails...
 
void list_erase (list_t *list, size_t index)
 Supprime un élément d’une liste. Plus de détails...
 
void list_set (list_t list, void *el, size_t index)
 Modifie un élément dans une liste. Plus de détails...
 
void * list_get (list_t list, size_t index)
 function description 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.c.

Documentation des fonctions

◆ list_delete()

void 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()

void 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()

void* list_get ( list_t  list,
size_t  index 
)

function description

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()

void 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()

list_t 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()

void 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