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

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

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

Aller au code source de ce fichier.

Fonctions

vector_t vector_new (size_t data_size)
 Créé un nouvel objet vector_t. Plus de détails...
 
void vector_delete (vector_t vector)
 Détruit un objet de type vector_t. Plus de détails...
 
void vector_insert (vector_t *vector, void *el, size_t index)
 Insère dans un vecteur un élément à l'index spécifié Plus de détails...
 
void vector_erase (vector_t *vector, size_t index)
 Supprime un élément à l'index spécifié d'un vecteur. Plus de détails...
 
void vector_set (vector_t vector, void *el, size_t index)
 Remplace l'élément spécifié d'un vecteur par une autre valeur. Plus de détails...
 
void * vector_get (vector_t vector, size_t index)
 Renvoie l'élément d'un vecteur se situant à un index spécifié Plus de détails...
 

Description détaillée

Fonctions de gestion de vecteur.

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

Définition dans le fichier vector.c.

Documentation des fonctions

◆ vector_delete()

void vector_delete ( vector_t  vector)

Détruit un objet de type vector_t.

Supprime toutes les données du vecteur, puis détruit le vecteur lui-même.

Paramètres
vectorVecteur à supprimer
36  {
37  free(vector.data);
38 }

Références vector_t::data.

◆ vector_erase()

void vector_erase ( vector_t vector,
size_t  index 
)

Supprime un élément à l'index spécifié d'un vecteur.

Supprime l'élément d'un vecteur situé à l'index spécifié

Paramètres
vectorVecteur duquel on souhaite supprimer un élément
indexIndex auquel se situe l'élément que l'on souhaite supprimer
87  {
88  char *data = (char *)vector->data;
89 
90  assert(index < vector->size);
91 
92  vector->size--;
93 
94  size_t mem_size = vector->data_size * (vector->size - index);
95  void *buffer = malloc(mem_size);
96 
97  memcpy(buffer, &data[vector->data_size * (index + 1)], mem_size);
98  memcpy(&data[vector->data_size * index], buffer, mem_size);
99 
100  free(buffer);
101 }

Références _list_t::data, vector_t::data, vector_t::data_size, et vector_t::size.

◆ vector_get()

void* vector_get ( vector_t  vector,
size_t  index 
)

Renvoie l'élément d'un vecteur se situant à un index spécifié

Renvoie un pointeur vers l'élément se situant à l'index index dans le vecteur vector

Paramètres
vectorVecteur dans lequel se situe l'élément souhaité
indexIndex du vecteur où se trouve l'élément souhaité
Renvoie
Pointeur vers l'élément souhaité
127  {
128  char *data = (char *)vector.data;
129 
130  assert(index < vector.size);
131 
132  return (void *)&data[vector.data_size * index];
133 }

Références _list_t::data, vector_t::data, vector_t::data_size, et vector_t::size.

◆ vector_insert()

void vector_insert ( vector_t vector,
void *  el,
size_t  index 
)

Insère dans un vecteur un élément à l'index spécifié

Insère l'élément el dans le vecteur vector à l'index spécifié. Si l'index pointe vers un objet déjà existant, ledit objet et les objets suivants seront décalés d'une case dans le vecteur, et l'élément el sera inséré à l'index index. Si l'argument index est supérieur à l'index maximal initial, alors l'élément sera inséré à la fin du vecteur. Si la capacité du vecteur n'est pas suffisamment importante pour ajouter un élément, une réallocation mémoire sera effectuée, invalidant d'éventuels pointeurs sur les données conservées dans le vecteur.

Paramètres
vectorVecteur dans lequel nous souhaitons insérer un nouvel élément
elÉlément que l'on souhaite insérer dans le vecteur
indexIndex auquel nous souhaitons insérer le nouvel élément.
54  {
55  size_t old_size = vector->size;
56 
57  vector->size = (index < vector->size) ? (vector->size + 1) : (index + 1);
58 
59  if (vector->size > vector->limit_size) {
60  while (vector->size > vector->limit_size) {
61  vector->limit_size <<= 1;
62  }
63  vector->data = realloc(vector->data, vector->data_size * vector->limit_size);
64  assert(vector->data);
65  }
66 
67  char *data = (char *)vector->data;
68 
69  if (index < old_size) {
70  size_t mem_size = vector->data_size * (old_size - index);
71  void *buffer = malloc(mem_size);
72 
73  memcpy(buffer, &data[vector->data_size * index], mem_size);
74  memcpy(&data[vector->data_size * (index + 1)], buffer, mem_size);
75 
76  free(buffer);
77  }
78  memcpy(&data[vector->data_size * index], el, vector->data_size);
79 }

Références _list_t::data, vector_t::data, vector_t::data_size, vector_t::limit_size, et vector_t::size.

◆ vector_new()

vector_t vector_new ( size_t  data_size)

Créé un nouvel objet vector_t.

Créé un nouveau vecteur et renvoie l'objet créé.

Paramètres
data_sizeTaille des éléments à conserver dans le vecteur
Renvoie
Retourne le nouveau vecteur créé de type vector_t
18  {
19  vector_t vector;
20 
21  vector.data = malloc(data_size);
22  vector.size = 0;
23  vector.data_size = data_size;
24  vector.limit_size = 1;
25 
26  assert(vector.data);
27 
28  return vector;
29 }

Références vector_t::data, vector_t::data_size, vector_t::limit_size, et vector_t::size.

◆ vector_set()

void vector_set ( vector_t  vector,
void *  el,
size_t  index 
)

Remplace l'élément spécifié d'un vecteur par une autre valeur.

Remplace la valeur de l'élément du vecteur vector à l'index index par la valeur de l'élément el.

Paramètres
vectorVecteur dans lequel on souhaite changer la valeur d'un élément
elÉlément dont la valeur sera copiée dans l'élément du vecteur spécifié
indexIndex dans le vecteur où se trouve l'élément dont on souhaite changer la valeur
112  {
113  char *data = (char *)vector.data;
114 
115  assert(index < vector.size);
116 
117  memcpy(&data[vector.data_size * index], el, vector.data_size);
118 }

Références _list_t::data, vector_t::data, vector_t::data_size, et vector_t::size.

vector_t::data_size
size_t data_size
Definition: vector.h:35
vector_t::size
size_t size
Definition: vector.h:34
vector_t
Tableau dynamique (vecteur)
Definition: vector.h:32
vector_t::data
void * data
Definition: vector.h:33
vector_t::limit_size
size_t limit_size
Definition: vector.h:36
_list_t::data
void * data
Definition: list.h:32