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

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

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

Aller au code source de ce fichier.

Structures de données

struct  vector_t
 Tableau dynamique (vecteur) Plus de détails...
 

Définitions de type

typedef struct vector_t vector_t
 

Fonctions

GL4DAPI vector_t GL4DAPIENTRY vector_new (size_t data_size)
 Créé un nouvel objet vector_t. Plus de détails...
 
GL4DAPI void GL4DAPIENTRY vector_delete (vector_t vector)
 Détruit un objet de type vector_t. Plus de détails...
 
GL4DAPI void GL4DAPIENTRY 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...
 
GL4DAPI void GL4DAPIENTRY vector_erase (vector_t *vector, size_t index)
 Supprime un élément à l'index spécifié d'un vecteur. Plus de détails...
 
GL4DAPI void GL4DAPIENTRY 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...
 
GL4DAPI void *GL4DAPIENTRY 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.h.

Documentation des définitions de type

◆ vector_t

vector_t agit comme un alias pour struct vector_t

Documentation des fonctions

◆ vector_delete()

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

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

GL4DAPI void* GL4DAPIENTRY 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()

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

GL4DAPI vector_t GL4DAPIENTRY 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()

GL4DAPI void GL4DAPIENTRY 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