| 1 | #ifndef _DICO_H_ |
|---|
| 2 | #define _DICO_H_ |
|---|
| 3 | |
|---|
| 4 | /******************************************************************** |
|---|
| 5 | structure définissant un item du dictionnaire |
|---|
| 6 | Un item est formé d'un couple (KEY,COUNT) plus un pointeur NEXT |
|---|
| 7 | permettant de chainer les items ayant le meme index de hachage. |
|---|
| 8 | Cette structure a un encombrement variable en mémoire, |
|---|
| 9 | puisque la longueur de la chaine de caractères KEY est variable. |
|---|
| 10 | *********************************************************************/ |
|---|
| 11 | typedef struct dico_item_s |
|---|
| 12 | { |
|---|
| 13 | struct dico_item_s *NEXT; /* pointeur sur l'item suivant */ |
|---|
| 14 | unsigned int COUNT; /* valeur associée à l'item */ |
|---|
| 15 | char KEY[]; /* tableau flexible contenant la clé */ |
|---|
| 16 | } dico_item_t; |
|---|
| 17 | |
|---|
| 18 | /******************************************************************** |
|---|
| 19 | structure définissant un dictionnaire |
|---|
| 20 | *********************************************************************/ |
|---|
| 21 | typedef struct dico_root_s |
|---|
| 22 | { |
|---|
| 23 | unsigned int SIZE; /* nombre de cases du tableau */ |
|---|
| 24 | dico_item_t **HTAB; /* adresse du tableau de pointeurs */ |
|---|
| 25 | } dico_root_t; |
|---|
| 26 | |
|---|
| 27 | |
|---|
| 28 | /******************************************************************** |
|---|
| 29 | structure définissant un itérateur permettant de parcourir |
|---|
| 30 | simplement tous les items d'un dictionnaire. |
|---|
| 31 | *********************************************************************/ |
|---|
| 32 | typedef struct dico_iterator_s |
|---|
| 33 | { |
|---|
| 34 | dico_root_t *ROOT; |
|---|
| 35 | unsigned INDEX; |
|---|
| 36 | dico_item_t *ITEM; |
|---|
| 37 | } dico_iterator_t; |
|---|
| 38 | |
|---|
| 39 | /******************************************************************** |
|---|
| 40 | fonctions externes |
|---|
| 41 | ********************************************************************/ |
|---|
| 42 | |
|---|
| 43 | extern dico_root_t *dico_create(unsigned int size); |
|---|
| 44 | extern dico_item_t *dico_get(dico_root_t *root, char *key); |
|---|
| 45 | extern dico_iterator_t *dico_iterator(dico_root_t *root); |
|---|
| 46 | extern dico_item_t *dico_first(dico_iterator_t *iter); |
|---|
| 47 | extern dico_item_t *dico_next(dico_iterator_t *iter); |
|---|
| 48 | |
|---|
| 49 | #endif |
|---|