Bonjour,
j'ai 2 fichiers header de définis :
- 1 qui gere des liste chainées d'elements "linked_list.h"
- 1 qui gere des "block pool" cad une gestion de la memoire en block (pour eviter de passer par des allocations de memoire dynamiques

Résumé de linked_list.h :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
struct linked_list_elem
{
	struct linked_list_head * head; ///< A pointer to the head of the list.
	struct linked_list_elem * prev; ///< A pointer to the previous element in the list.
	struct linked_list_elem * next; ///< A pointer to the next element in the list.
};
 
struct linked_list_head
{
	struct linked_list_elem * first; ///< A pointer to the first element in the list.
	struct linked_list_elem * last;  ///< A pointer to the last element in the list.
};
 
void 						linked_list_append ( struct linked_list_head * head, struct linked_list_elem * elem );
void 						linked_list_insert ( struct linked_list_head * head, struct linked_list_elem * elem );
void 						linked_list_unlink ( struct linked_list_elem * elem );
struct linked_list_elem * 	linked_list_pop_first ( struct linked_list_head * head );
struct linked_list_elem * 	linked_list_pop_last ( struct linked_list_head * head );
Résumé de block pool.h :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
struct block_pool;
 
struct block_pool * 	block_pool_create ( unsigned int block_size, unsigned int page_size, unsigned int min_pages, unsigned int max_pages );
void 					block_pool_delete ( struct block_pool * block_pool );
int 					block_pool_is_empty ( struct block_pool * block_pool );
void * 					block_pool_alloc ( struct block_pool * block_pool );
void 					block_pool_free ( struct block_pool * block_pool, void * block );
unsigned int 			block_pool_size ( struct block_pool * block_pool );
Maintenant j'aimerais crée une liste chainée de blocks, donc une liste chainée de blocks allouées par un block pool.

j'ai donc pensé a créer des structure comme tels :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
struct block_list_head
{
	struct linked_list_head head;	///< Block list head are linked list head
};
 
struct block_list_elem
{
	struct linked_list_elem	list;	///< Block list elem are linked list elem
	unsigned int			size;	///< The element size
	unsigned int		   begin;	///< Offset to begin
	unsigned int			 end;	///< Offset to end
};
et 4 fonctions :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// retourne un pointer sur les données et le maximum disponible dans le
premier block, si il n'y a rien la fonction retourne NULL et *size = 0
 
void *
block_list_read_begin ( struct block_list * block_list, unsigned int *
size )
 
// libere 'size' octets dans le premier block, size pouvant etre
inferieur ou egal au size que l'on a obtenu avec la fonction precedente.
 
int
block_list_read_end ( struct block_list * block_list, unsigned int size )
 
// retourne un pointer sur les données et le maximum disponible dans le
dernier block, si le dernier block est plein, un nouveau block vide et crée
 
void *
block_list_write_begin ( struct block_list * block_list, unsigned int *
size )
 
 
// ajoute 'size' octets au dernier block, size pouvant etre inferieur ou
egal au size que l'on a obtenu avec la fonction precedente
 
int
block_list_write_end ( struct block_list * block_list, unsigned int size )
mais comment gerer la notion de block pool dans ce que j'ai commencé ?
merci d'avance car la je bloque pas mal