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

gestion de tas d'éléments à taille fixe. Plus de détails...

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

Aller au code source de ce fichier.

Fonctions

GL4DAPI size_t GL4DAPIENTRY fheapCreate (size_t nmem, size_t size)
 créé un tas de nmem éléments de taille size et retourne son id (<>0). Plus de détails...
 
GL4DAPI size_t GL4DAPIENTRY fheapPut (size_t heap_id, void *element)
 insert, en copiant le contenu, un élément dans le tas et retourne son id (<>0). Plus de détails...
 
GL4DAPI void *GL4DAPIENTRY fheapGet (size_t heap_id, size_t element_id)
 récupère un élément du tas et retourne le pointeur vers la donnée. Attention, cette fonction n'efface pas la donnée du tas. Plus de détails...
 
GL4DAPI void GL4DAPIENTRY fheapDelete (size_t heap_id, size_t element_id)
 libère une donnée du tas (étiquette une donnée du tas comme espace libre). Plus de détails...
 
GL4DAPI void GL4DAPIENTRY fheapDestroy (size_t heap_id)
 libère l'ensemble du tas et sa mémoire. Plus de détails...
 
GL4DAPI void GL4DAPIENTRY fheapClean (void)
 libère tous les tas créés par cette bibliothèque. Plus de détails...
 

Description détaillée

gestion de tas d'éléments à taille fixe.

Auteur
Farès BELHADJ amsi@.nosp@m.ai.u.nosp@m.niv-p.nosp@m.aris.nosp@m.8.fr
Date
November 30, 2016

Définition dans le fichier fixed_heap.h.

Documentation des fonctions

◆ fheapClean()

GL4DAPI void GL4DAPIENTRY fheapClean ( void  )

libère tous les tas créés par cette bibliothèque.

101  {
102  size_t i;
103  fheap_t * h;
104  if(!_heap.heap) return;
105  for(i = 0; i < _heap.nmem; i++) {
106  h = &(((fheap_t * )_heap.heap)[i]);
107  if(h->heap)
108  fheapDestroy(i + 1);
109  }
110  free(_heap.heap);
111  _heap.heap = NULL;
112  free(_heap.stack);
113  _heap.stack = NULL;
114  _heap.head = 0;
115  _heap.size = 16;
116 }

Références _heap, fheapDestroy(), fheap_t::head, fheap_t::heap, fheap_t::nmem, fheap_t::size, et fheap_t::stack.

Référencé par fheapCreate().

◆ fheapCreate()

GL4DAPI size_t GL4DAPIENTRY fheapCreate ( size_t  nmem,
size_t  size 
)

créé un tas de nmem éléments de taille size et retourne son id (<>0).

Paramètres
nmemnombre initial d'éléments dans le tas.
sizetaille, en octets, d'éléments du tas.
Renvoie
identifiant du tas créé (différent de 0).
34  {
35  fheap_t * h;
36  size_t heap_id;
37  static int ft = 1;
38  if(_heap.heap == NULL) {
40  if(ft) gl4duAtExit(fheapClean);
41  ft = 0;
42  }
43  heap_id = _pop(_heap.stack, &(_heap.head));
44  if(_empty(_heap.head))
45  _moreheap(&_heap);
46  h = &(((fheap_t * )_heap.heap)[heap_id - 1]);
47  *h =_newheap(nmem, size);
48  return heap_id;
49 }

Références _empty(), _heap, _moreheap(), _newheap(), _pop(), fheapClean(), gl4duAtExit(), fheap_t::head, fheap_t::heap, fheap_t::nmem, fheap_t::size, et fheap_t::stack.

◆ fheapDelete()

GL4DAPI void GL4DAPIENTRY fheapDelete ( size_t  heap_id,
size_t  element_id 
)

libère une donnée du tas (étiquette une donnée du tas comme espace libre).

Paramètres
heap_ididentifiant du tas duquel la donnée est libérée.
element_ididentifiant de la donnée à libérer.
82  {
83  fheap_t * h = &(((fheap_t * )_heap.heap)[heap_id - 1]);
84  _push(h->stack, &(h->head), --element_id);
85 }

Références _heap, _push(), fheap_t::head, fheap_t::heap, et fheap_t::stack.

◆ fheapDestroy()

GL4DAPI void GL4DAPIENTRY fheapDestroy ( size_t  heap_id)

libère l'ensemble du tas et sa mémoire.

Paramètres
heap_ididentifiant du tas à libérer.
90  {
91  fheap_t * h = &(((fheap_t * )_heap.heap)[heap_id - 1]);
92  free(h->heap);
93  h->heap = NULL;
94  free(h->stack);
95  h->stack = NULL;
96  _push(_heap.stack, &(_heap.head), heap_id - 1);
97 }

Références _heap, _push(), fheap_t::head, fheap_t::heap, et fheap_t::stack.

Référencé par fheapClean().

◆ fheapGet()

GL4DAPI void* GL4DAPIENTRY fheapGet ( size_t  heap_id,
size_t  element_id 
)

récupère un élément du tas et retourne le pointeur vers la donnée. Attention, cette fonction n'efface pas la donnée du tas.

Paramètres
heap_ididentifiant du tas duquel est extraite la donnée.
element_ididentifiant de la donnée à extraire.
Renvoie
pointeur vers la donnée extraite.
72  {
73  fheap_t * h = &(((fheap_t * )_heap.heap)[heap_id - 1]);
74  return &(h->heap[--element_id * h->size]);
75 }

Références _heap, fheap_t::heap, et fheap_t::size.

◆ fheapPut()

GL4DAPI size_t GL4DAPIENTRY fheapPut ( size_t  heap_id,
void *  element 
)

insert, en copiant le contenu, un élément dans le tas et retourne son id (<>0).

Paramètres
heap_ididentifiant du tas dans lequel se passe l'insertion.
elementpointeur vers la donnée à insérer (copier).
Renvoie
identifiant de l'élément inséré dans le tas (différent de 0).
57  {
58  fheap_t * h = &(((fheap_t * )_heap.heap)[heap_id - 1]);
59  size_t element_id = _pop(h->stack, &(h->head));
60  if(_empty(h->head))
61  _moreheap(h);
62  memcpy(&(h->heap[(element_id - 1) * h->size]), element, h->size);
63  return element_id;
64 }

Références _empty(), _heap, _moreheap(), _pop(), fheap_t::head, fheap_t::heap, fheap_t::size, et fheap_t::stack.

_heap
static fheap_t _heap
Definition: fixed_heap.c:26
gl4duAtExit
void gl4duAtExit(void(*func)(void))
ajoute func dans la liste des fonctions à appeler lors du gl4duClean avec l'argument GL4DU_AT_EXIT ou...
Definition: gl4du.c:616
_pop
static size_t _pop(size_t *stack, size_t *head)
Definition: fixed_heap.c:150
_empty
static int _empty(size_t head)
Definition: fixed_heap.c:154
fheap_t::heap
char * heap
Definition: fixed_heap.c:16
fheap_t::nmem
size_t nmem
Definition: fixed_heap.c:15
_newheap
static fheap_t _newheap(size_t nmem, size_t size)
Definition: fixed_heap.c:118
fheap_t::stack
size_t * stack
Definition: fixed_heap.c:17
fheap_t::head
size_t head
Definition: fixed_heap.c:17
fheapClean
void fheapClean(void)
libère tous les tas créés par cette bibliothèque.
Definition: fixed_heap.c:101
fheap_t::size
size_t size
Definition: fixed_heap.c:15
fheapDestroy
void fheapDestroy(size_t heap_id)
libère l'ensemble du tas et sa mémoire.
Definition: fixed_heap.c:90
_push
static void _push(size_t *stack, size_t *head, size_t value)
Definition: fixed_heap.c:146
_moreheap
static void _moreheap(fheap_t *h)
Definition: fixed_heap.c:133
fheap_t
Definition: fixed_heap.c:14