33 int comparer_cle(
const Cle* a,
const Cle * b){
34 return a->cle - b->cle;
37 void initialiser_cle(
Cle* v,
int cle ){
41 void print_cle(
const Cle * c ){
42 printf(
"cle : %d", c->cle );
45 Cle * creer_cle(
int cle ){
46 Cle * res = xmalloc(
sizeof(
Cle));
47 initialiser_cle( res, cle );
51 void supprimer_cle(
Cle* cle ){
60 void initialiser_valeur(
Valeur* v,
int valeur ){
64 Valeur * creer_valeur(
int valeur ){
66 initialiser_valeur( res, valeur );
70 void supprimer_valeur(
Valeur* valeur ){
74 void print_valeur(
const Valeur * v ){
75 printf(
"valeur : %d", v->valeur );
80 Cle * copier_cle(
const Cle * cle ) {
81 return creer_cle( cle->cle );
130 (
int (*)(
const intptr_t,
const intptr_t )) comparer_cle,
131 (intptr_t (*)(
const intptr_t )) copier_cle,
132 (
void (*)(intptr_t)) supprimer_cle
136 initialiser_cle( &cle, 1 );
141 initialiser_cle( &cle, 2 );
146 initialiser_cle( &cle, 5 );
151 initialiser_cle( &cle, 2 );
156 initialiser_cle( &cle, 1 );
162 initialiser_cle( &cle, 2 );
165 initialiser_cle( &cle, 2 );
167 initialiser_cle( &cle, 5 );
169 initialiser_cle( &cle, 1 );
172 initialiser_cle( &cle, -3 );
181 int test_creer_table(){
186 TEST( table!=NULL, result );
192 (
int (*)(
const intptr_t,
const intptr_t )) comparer_cle,
193 (intptr_t (*)(
const intptr_t )) copier_cle,
194 (
void (*)(intptr_t)) supprimer_cle
197 TEST( table!=NULL, result );
204 int test_liberer_table(){
209 int test_add_table(){
214 int test_delete_table(){
219 int test_vider_table(){
243 (
int (*)(
const intptr_t,
const intptr_t )) comparer_cle,
244 (intptr_t (*)(
const intptr_t )) copier_cle,
245 (
void (*)(intptr_t)) supprimer_cle
249 initialiser_cle( &cle, 1 );
252 initialiser_cle( &cle, 2 );
255 initialiser_cle( &cle, 5 );
258 initialiser_cle( &cle, 2 );
261 initialiser_cle( &cle, 1 );
266 initialiser_cle( &cle, -3 );
271 initialiser_cle( &cle, 1 );
273 initialiser_cle( &cle, 5 );
275 initialiser_cle( &cle, 2 );
277 initialiser_cle( &cle, -1 );
279 initialiser_cle( &cle, -3 );
287 int test_print_table(){
309 (
int (*)(
const intptr_t,
const intptr_t )) comparer_cle,
310 (intptr_t (*)(
const intptr_t )) copier_cle,
311 (
void (*)(intptr_t)) supprimer_cle
315 initialiser_cle( &cle, 1 );
316 add_table( table, (intptr_t) &cle, (intptr_t) creer_valeur(11) );
318 initialiser_cle( &cle, 2 );
319 add_table( table, (intptr_t) &cle, (intptr_t) creer_valeur(12) );
321 initialiser_cle( &cle, -1 );
322 add_table( table, (intptr_t) &cle, (intptr_t) creer_valeur(-11) );
324 initialiser_cle( &cle, 5 );
325 add_table( table, (intptr_t) &cle, (intptr_t) creer_valeur(15) );
329 (
void(*)(
const intptr_t)) print_cle,
330 (
void(*)(
const intptr_t)) print_valeur,
342 int test_pour_toute_valeur_table(){
345 add_table( table, 1, (intptr_t) creer_valeur(1) );
346 add_table( table, 2, (intptr_t) creer_valeur(2) );
347 add_table( table, 3, (intptr_t) creer_valeur(3) );
348 add_table( table, 5, (intptr_t) creer_valeur(5) );
357 void action(
const intptr_t cle, intptr_t valeur,
void * data ){
358 if( cle+10 != ((
Valeur*)valeur)->valeur ) (*(
int*) data) = 0;
361 int test_pour_toute_cle_valeur_table(){
366 add_table( table, 1, (intptr_t) creer_valeur(11) );
367 add_table( table, 2, (intptr_t) creer_valeur(12) );
368 add_table( table, 3, (intptr_t) creer_valeur(13) );
369 add_table( table, 5, (intptr_t) creer_valeur(15) );
380 int test_trouver_table(){
403 int test_get_valeur(){
413 result &= general_test();
414 result &= test_creer_table();
415 result &= test_liberer_table();
416 result &= test_add_table();
417 result &= test_delete_table();
418 result &= test_vider_table();
420 result &= test_pour_toute_valeur_table();
421 result &= test_pour_toute_cle_valeur_table();
422 result &= test_trouver_table();
423 result &= test_get_cle();
424 result &= test_get_valeur();
427 fprintf( stderr,
"Certains tests du fichier %s ont échoués.\n", __FILE__ );
void vider_table(Table *table)
Supprime toutes les clés de la table.
intptr_t get_cle(Table_iterateur it)
Renvoie la clé de l'association pointée par l'itérateur passé en paramètre.
void pour_toute_cle_valeur_table(const Table *table, void(*action)(const intptr_t cle, intptr_t valeur, void *data), void *data)
La fonction passe en revue toutes les associaitons (clé, valeur) de la table, et apelle la fonction p...
void liberer_table(Table *table)
Cette fonction détruit une table. La mémoire qui a été allouée par la table pour stocker les clés son...
intptr_t delete_table(Table *table, const intptr_t cle)
Supprime une clé de la table. La mémoire de la clé est libérée et la valeur associée à la clé est per...
intptr_t get_valeur(Table_iterateur it)
Renvoie la valeur de l'association pointée par l'itérateur passé en paramètre.
void pour_toute_valeur_table(const Table *table, void(*action)(intptr_t valeur))
La fonction passe en revue toutes les valeurs de la table passée en paramètre et apelle la fonction p...
void print_table(Table *table, void(*print_cle)(const intptr_t cle), void(*print_valeur)(const intptr_t valeur), const char *text_de_fin)
Affiche la table. Vous devez donner en paramètres de print_table, des fonctions pour afficher les clé...
int iterateur_est_vide(Table_iterateur iterator)
Renvoie 1 si l'itérateur passé en paramètre est vide. Renvoie 0 sinon.
Table_iterateur trouver_table(const Table *table, const intptr_t cle)
Renvoie un itérateur positionné sur l'association dont la clé est identique (pour la fonction de comp...
Table * creer_table(int(*comparer_cle)(const intptr_t cle1, const intptr_t cle2), intptr_t(*copier_cle)(const intptr_t cle), void(*supprimer_cle)(intptr_t cle))
Renvoie une nouvelle table.
void add_table(Table *table, const intptr_t cle, const intptr_t valeur)
La fonction add_table() ajoute une association entre une clé et une valeur. Pour cela, add_table(), crée une copie de la clé passée en paramètre, l'enregistre dans la table et l'associe à la valeur passée en paramètre. La mémoire de la copie de la clé est gérée par la table. La mémoire de la clé passée en paramètre reste à la charge de l'utilisateur.