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