| 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
|
|---|